首页 > PHP开发 > php中级 > PHP数据库扩展之MySQL增强版扩展MySQLi
2014
11-07

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

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_STMT类

代表一个prepared语句。

mysqli_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_OFFMYSQLI_REPORT_ALL或者 MYSQLI_REPORT_STRICT (为错误抛出异常,译注:需要和MYSQLI_REPORT_ERROR联合使用), MYSQLI_REPORT_ERROR (报告MYSQL错误)和 MYSQLI_REPORT_INDEX (报告索引相关的错误)的任意组合。

MySQLi_Warning类

代表一个Mysql警告。

message
消息字符串

sqlstate
SQL状态

errno
错误编号

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 函数

编程技巧