zoukankan      html  css  js  c++  java
  • php数据库编程---mysqli扩展库

     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有两套编程风格

    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();
  • 相关阅读:
    selenium 操作过程中,元素标红高亮的两种实现方式
    python pytest测试框架介绍五---日志实时输出
    pytest 3.9在python 2.7下的一个bug
    Qt assis tant 帮助集合文档 -由.qhcp生成.qhc
    Qt assistant .qch显示乱码问题
    qhelpgenerator 由qhp生成qch过程碰到的问题 记录
    Qt creator新建widget项目....no valid kits found.....
    Qt creator 账号
    Qt 写Excel
    Qt获取主窗口
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4930595.html
Copyright © 2011-2022 走看看