PHP中mysqli函数和mysql函数差异与选用说明

with 0 comment

在PHP中提供了mysql和mysqli两种函数,我们都知道mysql是PHP操作MySQL数据库最原始的拓展库,而mysqli中的i表示Improvement,相当于前者的增强版,因此mysqli自然包含mysql函数的能力,增强了安全能力以减少SQL注入等问题发生

前提概述

mysql与mysqli都是PHP的函数集,与MySQL数据库本身关联不大
PHP5版本前,一般都是用mysql函数去驱动操作MySQL数据库,最常见的mysql_query()的函数,属于面向过程的编程
PHP5版本以后,增加mysqli函数,除了对就函数的增强外,比如与mysql_query()对应的有mysqli_query(),属于面向对象,实际既可以使用对象的方式操作也可以使用过程的方式操作

PS:在 php.ini 中的 extension=php_mysqli.dll 解除mysqli的封印

相关说明

mysql与mysqli都是用来处理MySQL数据库的
mysqli连接是永久连接,mysql是非永久连接(简单来说mysqli只使用同一个进程,而mysql第二次链接会打开新的进程)
这种特性将大大减少服务器的压力
mysqli封装了诸如事务等一些高级操作,同时封装数据库操作过程中的很多可用的方法
mysqli可以预处理语句来减少开销和SQL注入的风险,mysql则做不到

编码实例

由于mysqli提供了面向对象编程方式和面向过程方式,所以我们不再使用mysql进行编码实例

面向对象

<?php
$conn = @new mysqli("localhost", "user", "password", "mebugs");
//判断连接
if (mysqli_connect_errno()) {
    printf("链接数据库异常: %s\n", mysqli_connect_error());
    exit();
}
//查询SQL
$result = $conn->query("SELECT * FROM me_user");
//遍历结果
while($row = $result->fetch_array(MYSQLI_BOTH)){
    echo "id".$row['id']."<br>";
}
//释放结果集
$result->free();
//关闭连接
$conn->close();
?>

面向过程

<?php
$conn = @mysqli_connect("localhost", "user", "password", "mebugs");

if (!$conn) {
    printf("链接数据库异常: %s\n", mysqli_connect_error());
    exit();
}
//查询SQL
$query = mysqli_query($conn,"SELECT * FROM me_user");
//遍历结果
while($row = mysqli_fetch_array($query,MYSQLI_BOTH)){
    echo "id".$row['id']."<br>";
}
//释放结果集
mysqli_free_result($query);
//关闭连接
mysqli_close($conn);
?>

结语

实际上PHP语言使用面向对象还是面向过程对于mysqli而言本质没有太差差别
无非是直接调函数或者通过对象调方法
如果你使用的是PHP5,MySQL版本在5.0以上,能用mysqli的就尽量使用mqsqli
高效、更安全,至于是否使用面向对象编程方式,仁者见仁

Responses