PHP的mysqli扩展
从PHP 5.0开始,不仅可以使用早期的mysql数据库扩展函数,而且还可以使用新的扩展mysqli技术实现与MySQL数据库的信息交流。PHP的mysqli扩展被封装到一个类中,它是一种面向对象的技术,只能在PHP 5和MySQL 4.1(或更高的版本)环境中使用,(i)表示改进,其执行速度更快。使用mysqli扩展和传统的过程化方法相比更方便也更高效。利用mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
1、启用mysqli扩展模块
与mysql功能扩展模块类似,mysqli接口也不是PHP的一个集成组件,如果想使用这个功能扩展模块,需要显示配置PHP才能使用此扩展。在不同平台下的配置有所不同,如果在Linux平台中启用mysqli扩展,必须在编译PHP时加上--with-mysqli选项。如果在Windows平台中启用mysqli扩展,需要通过一个DLL文件提供相应的扩展。不管使用的是哪一个操作系统平台,都必须在php.ini文件里启用这个扩展,以确保PHP能够找到所有必要的DLL。可以在php.ini文件中找到下面一行,取消前面的注释,如果没有找到就添加这样一行:
extension=php_mysqli.dll //在php.ini文件中启用这一行
mysqli扩展不仅提供了mysql模块的所有功能,也相应地增加了一些新特性。mysqli扩展模块包括mysqli、mysqli_result和mysqli_stmt三个类,通过这三个类的搭配使用,就可以连接MySQL数据库服务器和选择数据库、查询和获取数据,以及使用预处理语句简化了重复执行的查询语句。
2、使用mysqli类
mysqli类的对象主要控制PHP和MySQL数据库服务器之间的连接、选择数据库、向MySQL服务器发送SQL语句,以及设置字符集等,这些任务都是通过该类中声明的构造方法、成员方法和成员属性完成的。
mysqli类中的成员方法如下图:
mysqli类中的成员属性,如下图:
2.1 连接mysql服务器
PHP程序在与MySQL服务器交互之前,需要成功地连接。如果选择使用面向对象接口与MySQL服务器连接,第一种方式是通过mysqli类的构造方法实例化对象,其构造方法的原型如下所示:
class mysqli { __construct ( [string host [, string username [, string passwd [, string dbname [, int port [, string socket]]]]]] ) }
通过mysqli类的构造方法原型可以看到,和前面介绍过的mysql_connect()函数相似,都可以接收同样的参数,也都是可选参数。为了方便起见,如果向它提供前四项信息:MySQL服务器的主机名、MySQL用户名、MySQL用户密码和要使用的数据库的名称,就不用再去调用mysqli对象中的connect()和select_db()等方法,再去连接MySQL服务器和选择数据库。但在连接成功后,可以通过mysqli对象中的select_db()方法为当前的连接改变它的默认数据库。
这个构造方法还有两个可选的参数:MySQL服务器的端口号、一个套接字文件或命名管道。但这两个可选参数很少使用,例如,MySQL服务器的端口号如果没用改动过,第五个参数默认设置为3306号端口。如果连接成功,该构造方法将返回一个mysqli对象。如下代码所示:
$mysqli=new mysqli("localhost", "mysql_user", " mysql_pwd", "mylib"); //连接MySQL数据库服务器
如果在创建mysqli对象时没有向构造方法传入连接参数,就需要多写几行代码,调用mysqli对象中的connect()方法连接MySQL数据库服务器,还可以使用select_db()方法特别指定数据库。如下代码所示:
<?php $mysqli=new mysqli(); //创建mysqli对象 $mysqli->connect("localhost", "mysql_user", "mysql_pwd"); //连接指定的MySQL数据库服务器 $mysqli->select_db("mylib"); //选择特定的数据库 ?>
<?php /*如果没有连接则使用mysqli_init()函数创建一个连接对象 */ $mysqli = mysqli_init(); /* 下面两行设置连接选项 */ $mysqli->options(MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0"); //连接成功则执行 $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5); //设置倒计时 /* 通过mysqli对象中的real_connect()方法连接MySQL服务器 */ $mysqli->real_connect('localhost', 'mysql_user', 'mysql_pwd', 'mylib'); ?>
2.2 处理连接错误报告
在连接过程中难免会出现错误,应该及时让用户得到通知。在连接出错时mysqli对象并没有创建成功,所以不能调用mysqli对象中的成员获取这些错误信息,要通过mysqli扩展中的过程方式获取。使用mysqli_connect_errno()函数测试在建立连接的过程中是否发生错误,相关的出错消息由mysqli_connect_error()函数负责返回。如下代码所示:
<?php $mysqli = new mysqli("localhost", "mysql_user", "mysql_pwd", "dbname"); /* 检查连接,如果连接出错输出错误信息并退出程序 */ if (mysqli_connect_errno()) { printf("连接失败: %s\n", mysqli_connect_error()); exit(); } ?>
2.3 关闭与mysql服务器的连接
完成数据库访问工作,如果不再需要连接到数据库,应该明确地释放有关的mysqli对象。虽然脚本执行结束后,所有打开的数据库连接都将自动关闭,资源被回收。但是,在执行过程中,有可能页面需要多个数据库连接,各个连接要在适当的时候将其关闭。mysqli对象中的close()方法负责关闭打开的数据库连接,成功时返回TRUE,否则返回FALSE。
在下面的示例中,连接MySQL数据库服务器、检查连接、通过mysqli对象中的一些成员方法和属性获取连接的详细信息,最后将打开的数据库连接关闭。如下代码所示:
<?php /* 连接MySQL数据库并,成功则返回mysqli 对象*/ $mysqli = new mysqli("localhost", "mysql_user", "mysql_pwd", "mylib"); /* 检查连接,如果连接出错输出错误信息并退出程序 */ if (mysqli_connect_errno()) { printf("连接失败: %s<br>", mysqli_connect_error()); exit(); } /* 执行语句 */ /* 关闭打开的数据库连接 */ $mysqli->close(); ?>



浙公网安备 33010602011771号