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");                           
//选择特定的数据库  
?>
虽然使用mysqli构造方法建立连接是最常见也是最方便的方法,但也有一个缺点:无法设置任何MySQL特有的连接选项。例如,设置连接倒计时,在连接成功之后立刻执行一个SQL命令等,所以还可以像下面这样去创建一个连接。如下代码所示:
<?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();     
?>

2.4 执行SQL命令

posted @ 2013-03-17 10:42  zhdevelop  阅读(729)  评论(0)    收藏  举报