mysqli扩展允许我们访问MySQL 4.1及以上版本提供的功能。
mysqli扩展和持久化连接
mysqli扩展的持久化连接在PHP5.3中被引入。支持已经存在于PDO MYSQL 和ext/mysql中。持久化连接背后的思想是客户端进程和数据库之间的连接可以通过一个客户端进程来保持重用, 而不是多次的创建和销毁。这降低了每次需要创建一个新连接的开销,未使用的连接被缓存起来并且准备随时被重用。
不像mysql扩展,mysqli没有提供一个特殊的方法用于打开持久化连接。需要打开一个持久化连接时,你必须在 连接时在主机名前增加p:。
使用持久化连接的问题在于它们可能在客户端处于不可预知的状态。比如,一个表锁可能在客户端意外终止之前被激活。 一个新的客户端进程重用这个持久化连接就会"按照原样"得到这个连接。这样,一个新的客户端进程 为了更好的使用持久化连接,就需要做任何可能的清理工作,这样就增加了对程序员的负担。
mysqli扩展的持久化连接提供了内建的清理处理代码。mysqli 所做的清理工作包括:
- 回滚活动的事务
- 关闭并且删除临时表
- 对表解锁、
- 重置会话变量
- 关闭prepared语句(在PHP中经常发生)
- 关闭处理程序
- 释放通过 GET_LOCK()获得的锁
这确保了从连接池返回的持久化连接在客户端进程使用它之前处于干净的状态。
mysqli扩展通过自动的调用C-API函数mysql_change_user() 来完成这个清理工作。
自动清理的特性有优点也有缺点。优点是程序员不再需要担心附加的清理代码,因为它们会自动调用。然而缺点就是 代码可能会潜在的慢一点,因为每次从连接池返回一个连接都需要执行这些清理代码。
这个自动清理的代码可以通过在编译php时定义MYSQLI_NO_CHANGE_USER_ON_PCONNECT
来关闭。
mysqli扩展在使用Mysql Native Driver或Mysql Client Library(libmysql)时都支持持久化连接。
MySQLi类
代表PHP和Mysql数据库之间的一个连接。
- mysqli::$affected_rows — Gets the number of affected rows in a previous MySQL operation
- mysqli::autocommit — 打开或关闭本次数据库连接的自动命令提交事务模式
- mysqli::begin_transaction — Starts a transaction
- mysqli::change_user — Changes the user of the specified database connection
- mysqli::character_set_name — 返回当前数据库连接的默认字符编码
- mysqli::$client_info — Get MySQL client info
- mysqli::$client_version — Returns the MySQL client version as a string
- mysqli::close — 关闭先前打开的数据库连接
- mysqli::commit — 提交一个事务
- mysqli::$connect_errno — Returns the error code from last connect call
- mysqli::$connect_error — Returns a string description of the last connect error
- mysqli::__construct — Open a new connection to the MySQL server
- mysqli::debug — Performs debugging operations
- mysqli::dump_debug_info — 将调试信息输出到日志
- mysqli::errno — 返回最近函数调用的错误代码
- mysqli::$error_list — Returns a list of errors from the last command executed
- mysqli::$error — Returns a string description of the last error
- mysqli::$field_count — Returns the number of columns for the most recent query
- mysqli::get_charset — Returns a character set object
- mysqli::get_client_info — Get MySQL client info
- mysqli_get_client_stats — Returns client per-process statistics
- mysqli_get_client_version — Returns the MySQL client version as an integer
- mysqli::get_connection_stats — Returns statistics about the client connection
- mysqli::$host_info — Returns a string representing the type of connection used
- mysqli::$protocol_version — Returns the version of the MySQL protocol used
- mysqli::$server_info — Returns the version of the MySQL server
- mysqli::$server_version — Returns the version of the MySQL server as an integer
- mysqli::get_warnings — Get result of SHOW WARNINGS
- mysqli::$info — Retrieves information about the most recently executed query
- mysqli::init — Initializes MySQLi and returns a resource for use with mysqli_real_connect()
- mysqli::$insert_id — Returns the auto generated id used in the last query
- mysqli::kill — Asks the server to kill a MySQL thread
- mysqli::more_results — Check if there are any more query results from a multi query
- mysqli::multi_query — Performs a query on the database
- mysqli::next_result — Prepare next result from multi_query
- mysqli::options — Set options
- mysqli::ping — Pings a server connection, or tries to reconnect if the connection has gone down
- mysqli::poll — Poll connections
- mysqli::prepare — Prepare an SQL statement for execution
- mysqli::query — 对数据库执行一次查询
- mysqli::real_connect — Opens a connection to a mysql server
- mysqli::real_escape_string — Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection
- mysqli::real_query — 执行一个mysql查询
- mysqli::reap_async_query — Get result from async query
- mysqli::refresh — Refreshes
- mysqli::release_savepoint — Rolls back a transaction to the named savepoint
- mysqli::rollback — 回退当前事务
- mysqli::rpl_query_type — Returns RPL query type
- mysqli::savepoint — Set a named transaction savepoint
- mysqli::select_db — 选择用于数据库查询的默认数据库
- mysqli::send_query — 发送请求并返回结果
- mysqli::set_charset — 设置默认字符编码
- mysqli::set_local_infile_default — Unsets user defined handler for load local infile command
- mysqli::set_local_infile_handler — Set callback function for LOAD DATA LOCAL INFILE command
- mysqli::$sqlstate — Returns the SQLSTATE error from previous MySQL operation
- mysqli::ssl_set — Used for establishing secure connections using SSL
- mysqli::stat — Gets the current system status
- mysqli::stmt_init — 初始化一条语句并返回一个用于mysqli_stmt_prepare(调用)的对象
- mysqli::store_result — Transfers a result set from the last query
- mysqli::$thread_id — Returns the thread ID for the current connection
- mysqli::thread_safe — 返回是否是线程安全的
- mysqli::use_result — Initiate a result set retrieval
- mysqli::$warning_count — Returns the number of warnings from the last query for the given link
MySQLi_STMT类
代表一个prepared语句。
- mysqli_stmt::$affected_rows — Returns the total number of rows changed, deleted, or inserted by the last executed statement
- mysqli_stmt::attr_get — Used to get the current value of a statement attribute
- mysqli_stmt::attr_set — Used to modify the behavior of a prepared statement
- mysqli_stmt::bind_param — Binds variables to a prepared statement as parameters
- mysqli_stmt::bind_result — Binds variables to a prepared statement for result storage
- mysqli_stmt::close — Closes a prepared statement
- mysqli_stmt::data_seek — Seeks to an arbitrary row in statement result set
- mysqli_stmt::$errno — Returns the error code for the most recent statement call
- mysqli_stmt::$error_list — Returns a list of errors from the last statement executed
- mysqli_stmt::$error — Returns a string description for last statement error
- mysqli_stmt::execute — Executes a prepared Query
- mysqli_stmt::fetch — Fetch results from a prepared statement into the bound variables
- mysqli_stmt::$field_count — Returns the number of field in the given statement
- mysqli_stmt::free_result — Frees stored result memory for the given statement handle
- mysqli_stmt::get_result — Gets a result set from a prepared statement
- mysqli_stmt::get_warnings — Get result of SHOW WARNINGS
- mysqli_stmt::$insert_id — Get the ID generated from the previous INSERT operation
- mysqli_stmt::more_results — Check if there are more query results from a multiple query
- mysqli_stmt::next_result — Reads the next result from a multiple query
- mysqli_stmt::$num_rows — Return the number of rows in statements result set
- mysqli_stmt::$param_count — Returns the number of parameter for the given statement
- mysqli_stmt::prepare — Prepare an SQL statement for execution
- mysqli_stmt::reset — Resets a prepared statement
- mysqli_stmt::result_metadata — Returns result set metadata from a prepared statement
- mysqli_stmt::send_long_data — Send data in blocks
- mysqli_stmt::$sqlstate — Returns SQLSTATE error from previous statement operation
- mysqli_stmt::store_result — Transfers a result set from a prepared statement
mysqli_result类
代表从一个数据库查询中获取的结果集
- mysqli_result::$current_field — Get current field offset of a result pointer
- mysqli_result::data_seek — Adjusts the result pointer to an arbitrary row in the result
- mysqli_result::fetch_all — Fetches all result rows as an associative array, a numeric array, or both
- mysqli_result::fetch_array — Fetch a result row as an associative, a numeric array, or both
- mysqli_result::fetch_assoc — Fetch a result row as an associative array
- mysqli_result::fetch_field_direct — Fetch meta-data for a single field
- mysqli_result::fetch_field — Returns the next field in the result set
- mysqli_result::fetch_fields — Returns an array of objects representing the fields in a result set
- mysqli_result::fetch_object — Returns the current row of a result set as an object
- mysqli_result::fetch_row — Get a result row as an enumerated array
- mysqli_result::$field_count — Get the number of fields in a result
- mysqli_result::field_seek — Set result pointer to a specified field offset
- mysqli_result::free — Frees the memory associated with a result
- mysqli_result::$lengths — Returns the lengths of the columns of the current row in the result set
- mysqli_result::$num_rows — Gets the number of rows in a result
MySQLi_Driver类
MySQLi 驱动.
- client_info
- 客户端API头版本(比如:(string)"5.1.49")
- client_version
- 客户端版本(比如:(int)50149)
- driver_version
- Mysqli驱动版本(比如:(int)101009)
- embedded
- 是否开启了MySQLi嵌入式支持。
- reconnect
- 允许或阻止重连接(查看INI指令中的mysqli.reconnect)
- report_mode
- 设置为
MYSQLI_REPORT_OFF
,MYSQLI_REPORT_ALL
或者MYSQLI_REPORT_STRICT
(为错误抛出异常,译注:需要和MYSQLI_REPORT_ERROR联合使用),MYSQLI_REPORT_ERROR
(报告MYSQL错误)和MYSQLI_REPORT_INDEX
(报告索引相关的错误)的任意组合。
- mysqli_driver::embedded_server_end — Stop embedded server
- mysqli_driver::embedded_server_start — Initialize and start embedded server
- mysqli_driver::$report_mode — Enables or disables internal report functions
MySQLi_Warning类
代表一个Mysql警告。
- message
- 消息字符串
- sqlstate
- SQL状态
- errno
- 错误编号
- mysqli_warning::__construct — The __construct purpose
- mysqli_warning::next — The next purpose
mysqli_sql_exception类
mysqli异常处理类
mysqli_sql_exception extends RuntimeException {
protected string $sqlstate ;
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
}
别名和过时的Mysqli 函数
- mysqli_bind_param — mysqli_stmt_bind_param的别名
- mysqli_bind_result — mysqli_stmt_bind_result的别名
- mysqli_client_encoding — mysqli_character_set_name的别名
- mysqli_connect — 别名 mysqli::__construct
- mysqli::disable_reads_from_master — Disable reads from master
- mysqli_disable_rpl_parse — 禁用RPL解析
- mysqli_enable_reads_from_master — 开启从主机读取
- mysqli_enable_rpl_parse — 开启RPL解析
- mysqli_escape_string — 别名 mysqli_real_escape_string
- mysqli_execute — mysqli_stmt_execute的别名
- mysqli_fetch — mysqli_stmt_fetch的别名。
- mysqli_get_cache_stats — 返回客户端Zval缓存统计信息
- mysqli_get_metadata — mysqli_stmt_result_metadata的别名
- mysqli_master_query — 在主/从机制中强制在主机中执行一个查询
- mysqli_param_count — mysqli_stmt_param_count的别名
- mysqli_report — 开启或禁用(Mysql)内部(错误)报告函数
- mysqli_rpl_parse_enabled — 检查是否开启了RPL解析
- mysqli_rpl_probe — RPL探测
- mysqli_send_long_data — mysqli_stmt_send_long_data的别名
- mysqli_set_opt — mysqli_options的别名
- mysqli_slave_query — 在主/从机制中强制在从机上执行一个查询