mysqli扩展用来访问MySQL 4.1或更高版本提供的功能。关于mysql,详情看www.mysql.com。
mysqli扩展和持久连接
持久连接支持是在PHP 5.3的mysqli扩展中被介绍的。对持久连接的支持已经表现在PDO MySQL和ext/mysql里。持久连接背后的想法是,一个客户端进程可以重复使用一个 在客户端进程和数据库之间的连接,而不是重复的被创建和销毁。这样可以减少创建新连接的消耗,因为未被使用的连接被缓存,并准备被使用。
与mysql扩展不同,mysqli不提供单独的的函数去打开持久连接。为了打开一个持久连接,你必须在连接参数hostname前面加 p: 。
持久连接的问题在于,他们可以被客户端置于一个不可预料的状态。比如,一个table lock可能被激活,接着连接意外的结束了。一个新的客户端进程重用这个持久连接,将得到同样的情况(指得到这个连接的时候,table lock就处于激活状态)。新客户端进程需要完成所有清理工作,在正常使用这个持久连接之前,这样会加重程序员的负担。
mysqli扩展的持久连接提供了内置的清理控制代码(cleanup handling code)。mysqli执行以下清理动作:
1.Rollback active transactions(活动回滚激事务)
2.Close and drop temporary tables(关闭和取消临时表)
3.Unlock table(解锁表)
4.Reset session variables(重置会话变量)
5.Close prepared statements(always happen with PHP) (关闭prepared语句,经常发生在PHP中)
6.Close handler(关闭处理程序)
7.Release lock acquired with GET_LOCK() (释放通过GET_LOCK()获得的锁)
这确保持久连接在从连接池获得的时候是clean状态(初始状态clean)
mysqli扩展自动做这个清理工作,通过调用C-API函数mysql_change_user()
自动清理特性有好处也有坏处。好处是程序员不用担心自己写清理代码,因为mysqli会自动调用。但是,坏处是哪些代码可能有点慢,因为这段清理代码每次都要运行,当从连接吃返回一个连接时。
可以在编译PHP时加上MYSQLI_NO_CHANGE_USER_ON_PCONNECT来关掉自动清理代码。
note:mysqli扩展支持持久连接,通过mysql native driver或者mysql client library。
预定义常量,编译选项,参照:http://www.php.net/manual/en/mysqli.constants.php
这里有几个类:
MySQLi,表示一个PHP和Mysql之间的连接,详情:http://www.php.net/manual/en/class.mysqli.php
MySQLi_STMT,表示一个prepared语句,详情:http://www.php.net/manual/en/class.mysqli-stmt.php
MySQLi_Result,表示一个从数据库查询获得的结果集,详情:http://www.php.net/manual/en/class.mysqli-result.php
MySQLi_Driver,mysqli驱动,详情:http://www.php.net/manual/en/class.mysqli-driver.php
MySQLi_Warning,表示一个mysql警告,详情:http://www.php.net/manual/en/class.mysqli-warning.php
最后有一些弃用的函数:http://www.php.net/manual/en/ref.mysqli.php