mysqli.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 961 行 · 第 1/3 页
SVN-BASE
961 行
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2004 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Author: Daniel Convissor <danielc@php.net> |// +----------------------------------------------------------------------+//// $Id$// EXPERIMENTALrequire_once 'DB/common.php';/** * Database independent query interface definition for PHP's mysqli * extension. * * This is for MySQL versions 4.1 and above. Requires PHP 5. * * Note that persistent connections no longer exist. * * @package DB * @version $Id$ * @category Database * @author Daniel Convissor <danielc@php.net> * @since Class functional since Release 1.6.3 */class DB_mysqli extends DB_common{ // {{{ properties var $connection; var $phptype, $dbsyntax; var $prepare_tokens = array(); var $prepare_types = array(); var $num_rows = array(); var $transaction_opcount = 0; var $autocommit = true; var $fetchmode = DB_FETCHMODE_ORDERED; /* Default fetch mode */ var $_db = false; /** * Array for converting MYSQLI_*_FLAG constants to text values * @var array * @access public * @since Property available since Release 1.6.5 */ var $mysqli_flags = array( MYSQLI_NOT_NULL_FLAG => 'not_null', MYSQLI_PRI_KEY_FLAG => 'primary_key', MYSQLI_UNIQUE_KEY_FLAG => 'unique_key', MYSQLI_MULTIPLE_KEY_FLAG => 'multiple_key', MYSQLI_BLOB_FLAG => 'blob', MYSQLI_UNSIGNED_FLAG => 'unsigned', MYSQLI_ZEROFILL_FLAG => 'zerofill', MYSQLI_AUTO_INCREMENT_FLAG => 'auto_increment', MYSQLI_TIMESTAMP_FLAG => 'timestamp', MYSQLI_SET_FLAG => 'set', // MYSQLI_NUM_FLAG => 'numeric', // unnecessary // MYSQLI_PART_KEY_FLAG => 'multiple_key', // duplicatvie MYSQLI_GROUP_FLAG => 'group_by' ); /** * Array for converting MYSQLI_TYPE_* constants to text values * @var array * @access public * @since Property available since Release 1.6.5 */ var $mysqli_types = array( MYSQLI_TYPE_DECIMAL => 'decimal', MYSQLI_TYPE_TINY => 'tinyint', MYSQLI_TYPE_SHORT => 'int', MYSQLI_TYPE_LONG => 'int', MYSQLI_TYPE_FLOAT => 'float', MYSQLI_TYPE_DOUBLE => 'double', // MYSQLI_TYPE_NULL => 'DEFAULT NULL', // let flags handle it MYSQLI_TYPE_TIMESTAMP => 'timestamp', MYSQLI_TYPE_LONGLONG => 'bigint', MYSQLI_TYPE_INT24 => 'mediumint', MYSQLI_TYPE_DATE => 'date', MYSQLI_TYPE_TIME => 'time', MYSQLI_TYPE_DATETIME => 'datetime', MYSQLI_TYPE_YEAR => 'year', MYSQLI_TYPE_NEWDATE => 'date', MYSQLI_TYPE_ENUM => 'enum', MYSQLI_TYPE_SET => 'set', MYSQLI_TYPE_TINY_BLOB => 'tinyblob', MYSQLI_TYPE_MEDIUM_BLOB => 'mediumblob', MYSQLI_TYPE_LONG_BLOB => 'longblob', MYSQLI_TYPE_BLOB => 'blob', MYSQLI_TYPE_VAR_STRING => 'varchar', MYSQLI_TYPE_STRING => 'char', MYSQLI_TYPE_GEOMETRY => 'geometry', ); // }}} // {{{ constructor /** * DB_mysql constructor. * * @access public */ function DB_mysqli() { $this->DB_common(); $this->phptype = 'mysqli'; $this->dbsyntax = 'mysqli'; $this->features = array( 'prepare' => false, 'ssl' => true, 'transactions' => true, 'limit' => 'alter' ); $this->errorcode_map = array( 1004 => DB_ERROR_CANNOT_CREATE, 1005 => DB_ERROR_CANNOT_CREATE, 1006 => DB_ERROR_CANNOT_CREATE, 1007 => DB_ERROR_ALREADY_EXISTS, 1008 => DB_ERROR_CANNOT_DROP, 1022 => DB_ERROR_ALREADY_EXISTS, 1046 => DB_ERROR_NODBSELECTED, 1048 => DB_ERROR_CONSTRAINT, 1050 => DB_ERROR_ALREADY_EXISTS, 1051 => DB_ERROR_NOSUCHTABLE, 1054 => DB_ERROR_NOSUCHFIELD, 1062 => DB_ERROR_ALREADY_EXISTS, 1064 => DB_ERROR_SYNTAX, 1100 => DB_ERROR_NOT_LOCKED, 1136 => DB_ERROR_VALUE_COUNT_ON_ROW, 1146 => DB_ERROR_NOSUCHTABLE, 1216 => DB_ERROR_CONSTRAINT, 1217 => DB_ERROR_CONSTRAINT, ); } // }}} // {{{ connect() /** * Connect to a database and log in as the specified user. * * @param string $dsn the data source name (see DB::parseDSN for syntax) * @param boolean $persistent (optional) whether the connection should * be persistent * @return mixed DB_OK on success, a DB error on failure * @access public */ function connect($dsninfo, $persistent = false) { if (!DB::assertExtension('mysqli')) { return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); } $this->dsn = $dsninfo; $conn = false; @ini_set('track_errors', true); if ($this->getOption('ssl') === true) { $init = mysqli_init(); mysqli_ssl_set( $init, empty($dsninfo['key']) ? null : $dsninfo['key'], empty($dsninfo['cert']) ? null : $dsninfo['cert'], empty($dsninfo['ca']) ? null : $dsninfo['ca'], empty($dsninfo['capath']) ? null : $dsninfo['capath'], empty($dsninfo['cipher']) ? null : $dsninfo['cipher'] ); if ($conn = @mysqli_real_connect($init, $dsninfo['hostspec'], $dsninfo['username'], $dsninfo['password'], $dsninfo['database'], $dsninfo['port'], $dsninfo['socket'])) { $conn = $init; } } else { $conn = @mysqli_connect( $dsninfo['hostspec'], $dsninfo['username'], $dsninfo['password'], $dsninfo['database'], $dsninfo['port'], $dsninfo['socket'] ); } @ini_restore('track_errors'); if (!$conn) { if (($err = @mysqli_connect_error()) != '') { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $err); } elseif (empty($php_errormsg)) { return $this->raiseError(DB_ERROR_CONNECT_FAILED); } else { return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null, null, $php_errormsg); } } if ($dsninfo['database']) { $this->_db = $dsninfo['database']; } $this->connection = $conn; return DB_OK; } // }}} // {{{ disconnect() /** * Log out and disconnect from the database. * * @return boolean true on success, false if not connected * @access public */ function disconnect() { $ret = @mysqli_close($this->connection); $this->connection = null; return $ret; } // }}} // {{{ simpleQuery() /** * Send a query to MySQL and return the results as a MySQL resource * identifier. * * @param string $query the SQL query * @return mixed a valid MySQL result for successful SELECT * queries, DB_OK for other successful queries. * A DB error is returned on failure. * @access public */ function simpleQuery($query) { $ismanip = DB::isManip($query); $this->last_query = $query; $query = $this->modifyQuery($query); if ($this->_db) { if (!@mysqli_select_db($this->connection, $this->_db)) { return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED); } } if (!$this->autocommit && $ismanip) { if ($this->transaction_opcount == 0) { $result = @mysqli_query($this->connection, 'SET AUTOCOMMIT=0'); $result = @mysqli_query($this->connection, 'BEGIN'); if (!$result) { return $this->mysqlRaiseError(); } } $this->transaction_opcount++; } $result = @mysqli_query($this->connection, $query); if (!$result) { return $this->mysqlRaiseError(); }# this next block is still sketchy.. if (is_object($result)) { $numrows = $this->numrows($result); if (is_object($numrows)) { return $numrows; }# need to come up with different means for next line# since $result is object (int)$result won't fly...// $this->num_rows[(int)$result] = $numrows; return $result; } return DB_OK; } // }}} // {{{ nextResult() /** * Move the internal mysql result pointer to the next available result. * * This method has not been implemented yet. * * @param resource $result a valid sql result resource * @return false * @access public */ function nextResult($result) { return false; } // }}} // {{{ fetchInto() /** * Fetch a row and insert the data into an existing array. * * Formating of the array and the data therein are configurable. * See DB_result::fetchInto() for more information. * * @param resource $result query result identifier * @param array $arr (reference) array where data from the row * should be placed
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?