1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作。Mysqli扩展库比mysql扩展库加强了。

2,mysqli扩展库和mysql扩展库的比较

(1) mysql是非持继连接函数而mysqli是永远连接函数。也就是说 mysql每次链接都会打开一个连接的进程,而 mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。

(2) mysqli连接是永久连接,而mysql是非永久连接。

    mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。

    mysqli连接:一直都只使用同一个进程。

    好处:这样就可以很大程度的减轻服务器端压力。

  当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数

(3) mysqli支持面向对象编程,同时mysqli扩展库考虑到php老程序员,提供面向过程的编程风格。

 (4) mysqli支持一次执行多条sql。

(5) mysqli具有事务特性。

3,mysqli有两套编程风格

mysqli扩展 mysqli扩展函数_php数据库编程

4,mysqli编程的快速入门,编写一个程序,这个程序从user1数据表中读取数据,并打印在网页中。

(1) 面向过程实现,mysqli面向过程与mysql基本相同,就是在mysql后加i,变为mysqli即可。不过还是有两处不同,分别是:

(1.1) 连接conn时候,mysql是在conn连接成功后,重新一步获取数据库的;mysqli是在conn连接同时获取数据库的。

mysqli进行连接

$conn = mysqli_connect($host,$username,$password,$dbName);

mysql进行连接

$conn = mysql_connect($host,$username,$password,$dbName);
mysql_select_mysql($dbName);

(1.2) 执行sql语句时候,mysql参数依次是$sql和$conn,而mysqli的次序恰好相反。

mysqli

$rs = mysqli_query($conn,$sql);

mysql

$rs = mysql_query($sql, $conn);

(1.3)mysqli实例如下:

<?php
//mysqli操作mysql数据库(面向过程风格)
//1,得到mysqli连接
$conn = mysqli_connect("127.0.0.1","root","123456","test") or die('连接失败:'.$conn_connect_error());

mysqli_query("set names utf-8");
//2,向数据库发送sql语句(ddl,dml dql.....)
$sql = "select * from user1";
mysqli_query($mysqli,$sql);

//3,处理得到的结果
//循环取出$res中的数据mysqli_fetch_row mysql_fetch_row
while($row=mysqli_fetch_assoc($res)){
    foreach($row as $key=>$val){
        echo "--$val";
    }
    echo "<br/>";
}
//4,关闭资源
//释放资源
mysqli_free_result($res);
//关闭连接
mysqli_close();
?>

(2) 面向对象实现,面向对象实现与面向过程实现类似,就是$conn和$rs都是类,调用的方法与面向过程相同。

<?php
    $host = '127.0.0.1';
    $username = 'root';
    $password = '123456';
    $dbName = "test";
    //mysqli操作mysql数据库(面向对象风格)
    //1,创建mysqli对象
    $mysqli = new MySQLi($host,$username,$password,$dbName);
    //验证是否ok
    if($mysqli->connect_error){
        die("连接失败! ".$mysqli->connect_error);
    }
    $mysqli->query("set names utf-8");
    //2,操作数据库(发送sql)
    $sql = "select * from user1";
    //$res是结果集.mysqli result
    $res = $mysqli->query($sql);
    //3,处理结果
    while($row = $res->fetch_assoc()){
        foreach($row as $key=>$val){
            echo "--$val";
        }
        echo "<br/>";
    }
    //4,关闭资源
    //释放资源
    $res->free();
    //关闭连接
    $mysqli->close();
?>

5,程序中的$res用于代表Sql语句的执行结果

① 如果执行的是dml语句,则返回bool;

② 如果执行的是dql语句,则返回查询结果MySQLi_Result结果集对象;

6,从mysqli result取出查询的结果有如下方式,推荐使用前两种方式,效率高。

① mysqli_result::fetch_assoc

② mysqli_result::fetch_row

③ mysqli_result::fetch_array

④ mysqli_result::fetch_object

7,数据库连接是非常稀有的资源,我们使用原则是晚创建、早释放。mysqli的面向对象特性对数据库进行增删改操作。操作过程中如果对应数据库的string类型,要求我们用''包括;如果对应数据库的数值型,则可以用''包括,也可以不用。

<?php
header("Content-type:text/html;charset=utf-8");
//mysqli操作mysql数据库(面向对象风格)
//1,创建mysqli对象
$mysqli = new MySQLi("127.0.0.1","root","123456","test");
//验证是否ok
if($mysqli->connect_error){
    die("连接失败! ".$mysqli->connect_error);
}
//2,操作数据库(发送sql)
//$sql = "insert into user1 (name,password,email,age) VALUES ('小红',md5('123456'),'xiaohong@126.com',9)";
//$sql = "delete from user1 where id = 3";
$sql = "update user1 set name = '小花', password = md5('120987'),email='757499089@qq.com',age = 20 where id = 4";
//$res是结果集.mysqli result
$res = $mysqli->query($sql);
if(!$res){
    echo "操作失败".$mysqli->error;
}else{
    if($mysqli->affected_rows > 0){
        echo "执行成功!";
    }else{
        echo "没有数据表没有变化!";
    }
}
//4,关闭资源
//关闭连接
$mysqli->close();