您的位置:首页技术文章
文章详情页

PHP数据库扩展之MySQL增强版扩展MySQLi

【字号: 日期:2022-09-15 16:29:29浏览:4作者:猪猪

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 operationmysqli::autocommit — 打开或关闭本次数据库连接的自动命令提交事务模式mysqli::begin_transaction — Starts a transactionmysqli::change_user — Changes the user of the specified database connectionmysqli::character_set_name — 返回当前数据库连接的默认字符编码mysqli::$client_info — Get MySQL client infomysqli::$client_version — Returns the MySQL client version as a stringmysqli::close — 关闭先前打开的数据库连接mysqli::commit — 提交一个事务mysqli::$connect_errno — Returns the error code from last connect callmysqli::$connect_error — Returns a string description of the last connect errormysqli::__construct — Open a new connection to the MySQL servermysqli::debug — Performs debugging operationsmysqli::dump_debug_info — 将调试信息输出到日志mysqli::errno — 返回最近函数调用的错误代码mysqli::$error_list — Returns a list of errors from the last command executedmysqli::$error — Returns a string description of the last errormysqli::$field_count — Returns the number of columns for the most recent querymysqli::get_charset — Returns a character set objectmysqli::get_client_info — Get MySQL client infomysqli_get_client_stats — Returns client per-process statisticsmysqli_get_client_version — Returns the MySQL client version as an integermysqli::get_connection_stats — Returns statistics about the client connectionmysqli::$host_info — Returns a string representing the type of connection usedmysqli::$protocol_version — Returns the version of the MySQL protocol usedmysqli::$server_info — Returns the version of the MySQL servermysqli::$server_version — Returns the version of the MySQL server as an integermysqli::get_warnings — Get result of SHOW WARNINGSmysqli::$info — Retrieves information about the most recently executed querymysqli::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 querymysqli::kill — Asks the server to kill a MySQL threadmysqli::more_results — Check if there are any more query results from a multi querymysqli::multi_query — Performs a query on the databasemysqli::next_result — Prepare next result from multi_querymysqli::options — Set optionsmysqli::ping — Pings a server connection, or tries to reconnect if the connection has gone downmysqli::poll — Poll connectionsmysqli::prepare — Prepare an SQL statement for executionmysqli::query — 对数据库执行一次查询mysqli::real_connect — Opens a connection to a mysql servermysqli::real_escape_string — Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connectionmysqli::real_query — 执行一个mysql查询mysqli::reap_async_query — Get result from async querymysqli::refresh — Refreshesmysqli::release_savepoint — Rolls back a transaction to the named savepointmysqli::rollback — 回退当前事务mysqli::rpl_query_type — Returns RPL query typemysqli::savepoint — Set a named transaction savepointmysqli::select_db — 选择用于数据库查询的默认数据库mysqli::send_query — 发送请求并返回结果mysqli::set_charset — 设置默认字符编码mysqli::set_local_infile_default — Unsets user defined handler for load local infile commandmysqli::set_local_infile_handler — Set callback function for LOAD DATA LOCAL INFILE commandmysqli::$sqlstate — Returns the SQLSTATE error from previous MySQL operationmysqli::ssl_set — Used for establishing secure connections using SSLmysqli::stat — Gets the current system statusmysqli::stmt_init — 初始化一条语句并返回一个用于mysqli_stmt_prepare(调用)的对象mysqli::store_result — Transfers a result set from the last querymysqli::$thread_id — Returns the thread ID for the current connectionmysqli::thread_safe — 返回是否是线程安全的mysqli::use_result — Initiate a result set retrievalmysqli::$warning_count — Returns the number of warnings from the last query for the given linkMySQLi_STMT类

代表一个prepared语句。

mysqli_stmt::$affected_rows — Returns the total number of rows changed, deleted, or inserted by the last executed statementmysqli_stmt::attr_get — Used to get the current value of a statement attributemysqli_stmt::attr_set — Used to modify the behavior of a prepared statementmysqli_stmt::bind_param — Binds variables to a prepared statement as parametersmysqli_stmt::bind_result — Binds variables to a prepared statement for result storagemysqli_stmt::close — Closes a prepared statementmysqli_stmt::data_seek — Seeks to an arbitrary row in statement result setmysqli_stmt::$errno — Returns the error code for the most recent statement callmysqli_stmt::$error_list — Returns a list of errors from the last statement executedmysqli_stmt::$error — Returns a string description for last statement errormysqli_stmt::execute — Executes a prepared Querymysqli_stmt::fetch — Fetch results from a prepared statement into the bound variablesmysqli_stmt::$field_count — Returns the number of field in the given statementmysqli_stmt::free_result — Frees stored result memory for the given statement handlemysqli_stmt::get_result — Gets a result set from a prepared statementmysqli_stmt::get_warnings — Get result of SHOW WARNINGSmysqli_stmt::$insert_id — Get the ID generated from the previous INSERT operationmysqli_stmt::more_results — Check if there are more query results from a multiple querymysqli_stmt::next_result — Reads the next result from a multiple querymysqli_stmt::$num_rows — Return the number of rows in statements result setmysqli_stmt::$param_count — Returns the number of parameter for the given statementmysqli_stmt::prepare — Prepare an SQL statement for executionmysqli_stmt::reset — Resets a prepared statementmysqli_stmt::result_metadata — Returns result set metadata from a prepared statementmysqli_stmt::send_long_data — Send data in blocksmysqli_stmt::$sqlstate — Returns SQLSTATE error from previous statement operationmysqli_stmt::store_result — Transfers a result set from a prepared statementmysqli_result类

代表从一个数据库查询中获取的结果集

mysqli_result::$current_field — Get current field offset of a result pointermysqli_result::data_seek — Adjusts the result pointer to an arbitrary row in the resultmysqli_result::fetch_all — Fetches all result rows as an associative array, a numeric array, or bothmysqli_result::fetch_array — Fetch a result row as an associative, a numeric array, or bothmysqli_result::fetch_assoc — Fetch a result row as an associative arraymysqli_result::fetch_field_direct — Fetch meta-data for a single fieldmysqli_result::fetch_field — Returns the next field in the result setmysqli_result::fetch_fields — Returns an array of objects representing the fields in a result setmysqli_result::fetch_object — Returns the current row of a result set as an objectmysqli_result::fetch_row — Get a result row as an enumerated arraymysqli_result::$field_count — Get the number of fields in a resultmysqli_result::field_seek — Set result pointer to a specified field offsetmysqli_result::free — Frees the memory associated with a resultmysqli_result::$lengths — Returns the lengths of the columns of the current row in the result setmysqli_result::$num_rows — Gets the number of rows in a resultMySQLi_Driver类

MySQLi 驱动.

client_info客户端API头版本(比如:(string)'5.1.49')

client_version客户端版本(比如:(int)50149)

driver_versionMysqli驱动版本(比如:(int)101009)

embedded是否开启了MySQLi嵌入式支持。

reconnect允许或阻止重连接(查看INI指令中的mysqli.reconnect)

report_mode设置为MYSQLI_REPORT_OFFMYSQLI_REPORT_ALL或者 MYSQLI_REPORT_STRICT (为错误抛出异常,译注:需要和MYSQLI_REPORT_ERROR联合使用), MYSQLI_REPORT_ERROR (报告MYSQL错误)和 MYSQLI_REPORT_INDEX (报告索引相关的错误)的任意组合。

mysqli_driver::embedded_server_end — Stop embedded servermysqli_driver::embedded_server_start — Initialize and start embedded servermysqli_driver::$report_mode — Enables or disables internal report functionsMySQLi_Warning类

代表一个Mysql警告。

message消息字符串

sqlstateSQL状态

errno错误编号

mysqli_warning::__construct — The __construct purposemysqli_warning::next — The next purposemysqli_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::__constructmysqli::disable_reads_from_master — Disable reads from mastermysqli_disable_rpl_parse — 禁用RPL解析mysqli_enable_reads_from_master — 开启从主机读取mysqli_enable_rpl_parse — 开启RPL解析mysqli_escape_string — 别名 mysqli_real_escape_stringmysqli_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 — 在主/从机制中强制在从机上执行一个查询

标签: PHP
相关文章: