dbo_mysql.php

来自「Cake Framwork , Excellent」· PHP 代码 · 共 577 行 · 第 1/2 页

PHP
577
字号
<?php/* SVN FILE: $Id: dbo_mysql.php 7118 2008-06-04 20:49:29Z gwoo $ *//** * MySQL layer for DBO * * Long description for file * * PHP versions 4 and 5 * * CakePHP(tm) :  Rapid Development Framework <http://www.cakephp.org/> * Copyright 2005-2008, Cake Software Foundation, Inc. *								1785 E. Sahara Avenue, Suite 490-204 *								Las Vegas, Nevada 89104 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright		Copyright 2005-2008, Cake Software Foundation, Inc. * @link				http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project * @package			cake * @subpackage		cake.cake.libs.model.datasources.dbo * @since			CakePHP(tm) v 0.10.5.1790 * @version			$Revision: 7118 $ * @modifiedby		$LastChangedBy: gwoo $ * @lastmodified	$Date: 2008-06-04 13:49:29 -0700 (Wed, 04 Jun 2008) $ * @license			http://www.opensource.org/licenses/mit-license.php The MIT License *//** * Short description for class. * * Long description for class * * @package		cake * @subpackage	cake.cake.libs.model.datasources.dbo */class DboMysql extends DboSource {/** * Enter description here... * * @var unknown_type */	var $description = "MySQL DBO Driver";/** * Enter description here... * * @var unknown_type */	var $startQuote = "`";/** * Enter description here... * * @var unknown_type */	var $endQuote = "`";/** * Index of basic SQL commands * * @var array * @access protected */	var $_commands = array(		'begin'    => 'START TRANSACTION',		'commit'   => 'COMMIT',		'rollback' => 'ROLLBACK'	);/** * Base configuration settings for MySQL driver * * @var array */	var $_baseConfig = array(		'persistent' => true,		'host' => 'localhost',		'login' => 'root',		'password' => '',		'database' => 'cake',		'port' => '3306',		'connect' => 'mysql_pconnect'	);/** * MySQL column definition * * @var array */	var $columns = array(		'primary_key' => array('name' => 'NOT NULL AUTO_INCREMENT'),		'string' => array('name' => 'varchar', 'limit' => '255'),		'text' => array('name' => 'text'),		'integer' => array('name' => 'int', 'limit' => '11', 'formatter' => 'intval'),		'float' => array('name' => 'float', 'formatter' => 'floatval'),		'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'),		'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'),		'time' => array('name' => 'time', 'format' => 'H:i:s', 'formatter' => 'date'),		'date' => array('name' => 'date', 'format' => 'Y-m-d', 'formatter' => 'date'),		'binary' => array('name' => 'blob'),		'boolean' => array('name' => 'tinyint', 'limit' => '1')	);/** * Connects to the database using options in the given configuration array. * * @return boolean True if the database could be connected, else false */	function connect() {		$config = $this->config;		$connect = $config['connect'];		$this->connected = false;		if (!$config['persistent']) {			$this->connection = mysql_connect($config['host'] . ':' . $config['port'], $config['login'], $config['password'], true);		} else {			$this->connection = $connect($config['host'] . ':' . $config['port'], $config['login'], $config['password']);		}		if (mysql_select_db($config['database'], $this->connection)) {			$this->connected = true;		}		if (isset($config['encoding']) && !empty($config['encoding'])) {			$this->setEncoding($config['encoding']);		}		return $this->connected;	}/** * Disconnects from database. * * @return boolean True if the database could be disconnected, else false */	function disconnect() {		@mysql_free_result($this->results);		$this->connected = !@mysql_close($this->connection);		return !$this->connected;	}/** * Executes given SQL statement. * * @param string $sql SQL statement * @return resource Result resource identifier * @access protected */	function _execute($sql) {		return mysql_query($sql, $this->connection);	}/** * Returns an array of sources (tables) in the database. * * @return array Array of tablenames in the database */	function listSources() {		$cache = parent::listSources();		if ($cache != null) {			return $cache;		}		$result = $this->_execute('SHOW TABLES FROM ' . $this->name($this->config['database']) . ';');		if (!$result) {			return array();		} else {			$tables = array();			while ($line = mysql_fetch_array($result)) {				$tables[] = $line[0];			}			parent::listSources($tables);			return $tables;		}	}/** * Returns an array of the fields in given table name. * * @param string $tableName Name of database table to inspect * @return array Fields in table. Keys are name and type */	function describe(&$model) {		$cache = parent::describe($model);		if ($cache != null) {			return $cache;		}		$fields = false;		$cols = $this->query('DESCRIBE ' . $this->fullTableName($model));		foreach ($cols as $column) {			$colKey = array_keys($column);			if (isset($column[$colKey[0]]) && !isset($column[0])) {				$column[0] = $column[$colKey[0]];			}			if (isset($column[0])) {				$fields[$column[0]['Field']] = array(					'type'		=> $this->column($column[0]['Type']),					'null'		=> ($column[0]['Null'] == 'YES' ? true : false),					'default'	=> $column[0]['Default'],					'length'	=> $this->length($column[0]['Type']),				);				if(!empty($column[0]['Key']) && isset($this->index[$column[0]['Key']])) {					$fields[$column[0]['Field']]['key']	= $this->index[$column[0]['Key']];				}			}		}		$this->__cacheDescription($this->fullTableName($model, false), $fields);		return $fields;	}/** * Returns a quoted and escaped string of $data for use in an SQL statement. * * @param string $data String to be prepared for use in an SQL statement * @param string $column The column into which this data will be inserted * @param boolean $safe Whether or not numeric data should be handled automagically if no column data is provided * @return string Quoted and escaped data */	function value($data, $column = null, $safe = false) {		$parent = parent::value($data, $column, $safe);		if ($parent != null) {			return $parent;		} elseif ($data === null) {			return 'NULL';		} elseif ($data === '') {			return  "''";		}		if (empty($column)) {			$column = $this->introspectType($data);		}		switch ($column) {			case 'boolean':				return $this->boolean((bool)$data);			break;			case 'integer':			case 'float':				if ((is_int($data) || is_float($data)) || (					is_numeric($data) && strpos($data, ',') === false &&					$data[0] != '0' && strpos($data, 'e') === false				)) {					return $data;				}			default:				$data = "'" . mysql_real_escape_string($data, $this->connection) . "'";			break;		}		return $data;	}/** * Generates and executes an SQL UPDATE statement for given model, fields, and values. * * @param Model $model * @param array $fields * @param array $values * @param mixed $conditions * @return array */	function update(&$model, $fields = array(), $values = null, $conditions = null) {		if ($values == null) {			$combined = $fields;		} else {			$combined = array_combine($fields, $values);		}		$fields = $this->_prepareUpdateFields($model, $combined, empty($conditions), !empty($conditions));		$fields = join(', ', $fields);		$table = $this->fullTableName($model);		$alias = $this->name($model->alias);		$joins = implode(' ', $this->_getJoins($model));		if (empty($conditions)) {			$alias = $joins = false;		}		$conditions = $this->conditions($this->defaultConditions($model, $conditions, $alias), true, true, $model);		if ($conditions === false) {			return false;		}		if (!$this->execute($this->renderStatement('update', compact('table', 'alias', 'joins', 'fields', 'conditions')))) {			$model->onError();			return false;		}		return true;	}/** * Generates and executes an SQL DELETE statement for given id/conditions on given model. * * @param Model $model * @param mixed $conditions * @return boolean Success */	function delete(&$model, $conditions = null) {		$alias = $this->name($model->alias);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?