• 【二十】mysqli基于面向过程与面向对象的编程


    面向过程的方式

    musqli扩展库操作mysql数据库步骤:

    1.获取连接并选择数据库

    //语法 mysqli_connect(host,username,password,dbname,port,socket);
        $conn=mysqli_connect("127.0.0.1",'root','','user');
        if (!$conn) {
            die("链接失败");
        }

    2.设置操作编码

    // 语法:mysqli_set_charset(connection,charset);
    // 修改数据库连接字符集为 utf8
    mysqli_set_charset($conn,"utf-8") ;

    3.发送sql指令(分为ddl语句和dml语句、dql语句、dtl语句)

    • ddl语句:数据定义语句
    • dml语句:数据操作语句(update’、insert、delete)
    • dql语句:(select)
    • dtl语句:数据事务语句(rollback、commit)

    查询数据(dml语句):返回的是一个结果集

            //查询语句
            $sql="select * from user1";
            //执行sql语句
        $res=mysqli_query($conn,$sql);
            //打印返回结果为一个结果集
        var_dump($res);
    结果集:object(mysqli_result)#2 (5) {
    // ["current_field"]=> int(0)
    // ["field_count"]=> int(5) 
    //["lengths"]=> NULL 
    //["num_rows"]=>int(6)
     //["type"]=> int(0)
    //} 
        echo "<br/>";
        echo "----".$res->num_rows;
    //取结果集的数据
        while ($obj = mysqli_fetch_object($res)) {
            var_dump($obj);
            foreach ($obj as $key => $value) {
                echo "$key------$value";
                echo "<br/>";
            }
            echo "<br/>";
        }    
    函数名说明
    mysqli_fetch_assoc($result) 查询到的一条数据以关联数组形式返回 [key]=>value
    mysqli_fetch_row($result) 依次取出$res结果集的下一行数据 查询到的一条数据以索引数组形式返回 [0]=>value
    mysqli_fetch_array($result) 查询到的一条数据以索引数组和关联数组的混合形式返回[key]=>valuec/[0]=>value
    mysqli_fetch_object($result) 查询到的一条数据以对象属性的形式返回  object{[key]=>value}
    mysqli_fetch_array($result) 查询到的一条数据以索引数组和关联数组的混合形式返回
    mysqli_fetch_array($result,MYSQLI_BOTH) 查询到的一条数据以索引数组和关联数组的混合形式返回
    mysqli_fetch_array($result,MYSQLI_ASSOC) 查询到的一条数据以关联数组的混合形式返回
    mysqli_fetch_array($result,MYSQLI_ROW) 查询到的一条数据以索引数组的混合形式返回

    增删改(dml语句):返回的是一个布尔值

        $sql="INSERT INTO user1(name,password,email,age)VALUES ('haha',MD5('123456'),'test@qq.com',16);";
        $res=mysqli_query($conn,$sql) or die("执行失败");
        var_dump($res);
    //返回的是一个布尔值
        if (!$res) {
            echo "删除失败";  
        }
        echo "受影响的行数: " . mysqli_affected_rows($conn); 
        if(mysqli_affected_rows($conn)>0){
            echo "添加成功";
        }else{
            echo "没有影响的行数";
        }    

    4.释放资源

    注意:释放结果集和关闭连接内填的资源不一样

        // 释放结果集
        mysqli_free_result($res);
         // 函数关闭先前打开的数据库连接
        mysqli_close($conn);

    封装cuid工具

     sqltool.class.php

    <?php
        class sqltool{
            private $conn;
            private $host="localhost";
            private $user='root';
            private $password='';
            private $db='user';
            // 构造方法,初始化连接数据库及设置字符编码
             function  __construct(){
                $this->conn=mysqli_connect($this->host,$this->user,$this->password,$this->db);
                if (!$this->conn) {
                    die("连接失败".mysqli_error());
                }
                mysqli_set_charset($this->conn,"utf8");
            }
            // 执行dml语句,并返回值
            function excute_dml($sql){
                $res=mysqli_query($this->conn,$sql) or die("shiai").mysqli_error();
                if (!$res) {
                    return 0;
                }else{
                    // mysqli_affected_rows:并影响的行数
                    if (mysqli_affected_rows($this->conn)>0) {
                        return 1;
                    }else{
                         return 2;
                    }
                }
            }
            // 执行dql语句,并返回值
            function excute_dql($sql){
                $res=mysqli_query($this->conn,$sql) or die("shibai");
                //var_dump($res);
                return $res;
            }
        }

    testsql.php

    <?php
        require "sqltool.class.php";
        //$sql="insert into user1(name,password,email,age) values('hhhhhh',md5('123'),'qq@163.com',22)";
        $sql="delete from user1 where name='qq'"; 
        $sqltool=new sqltool();
        // 调用dml
        $res=$sqltool->excute_dml($sql);
        if ($res==0) {
             echo "执行失败<br/>";
        }else if ($res==1) {
            echo "执行成功<br/>";
        }else if ($res==2) {
            echo "没有影响到行数<br/>";
        }
        $sql1="select * from user1";
        // 调用dql
        $res1=$sqltool->excute_dql($sql1);
        //var_dump($res1);
        if ($res1->num_rows>0) {
            while ($row=mysqli_fetch_row($res1)) {
                //var_dump($row);
                //echo "<br/>";
                foreach ($row as $key => $value) {
                    echo "---$value";
                }
                echo "<br/>";
            }    
        }
    ?>

    面向对象的编程

    mysqlitest.php

    <?php
        //面向对象
        $conn=new mysqli("127.0.0.1","root","","test");
        if ($conn->connect_errno) {
            echo $conn->connect_error;
        }
        $sql="select * from user1";
        $res=$conn->query($sql);
        while ($row=$res->fetch_row()) {
            foreach ($row as $key => $value) {
                echo "<br/>".$value;
            }
        }
        $res->free();
        $conn->close();
    ?>

    封装

    sqliconnection.class.php

    <?php
        class sqlconnect{
            private $mysqli;
            private static $host="127.0.0.1";
            private static $user="root";
            private static $password="";
            private static $database="test";
            //构造函数
            function __construct(){
                $this->mysqli=new MySQLi(self::$host,self::$user,self::$password,self::$database);
                if (!$this->mysqli) {
                    die("数据库链接失败".$this->mysqli->connect_error);
                }
                $this->mysqli->query("set names utf8");
            }
            //查询
            public function excete_dql($sql){
                $res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error);
                return $res;
            }
            public function excete_dml($sql){
                $res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error);
                if (!$res) {
                    return 0;
                }else{
                    if ($this->mysqli->affected_rows>0) {
                        return 1;
                    }else{
                        return 2;
                    }
                }
            }
        }
    ?>

    sqlitest.php

    <?php
        require "sqliconnection.class.php";
        $sqlconnect=new sqlconnect();
        //插入记录
        $sql1="INSERT INTO user1(name,Password,Email,age)VALUES('asd','555','asd@qq.com','23');";
        $res1=$sqlconnect->excete_dml($sql1);
        if ($res1=="0") {
            echo "失败<br/>";
        }elseif ($res1=="1") {
            echo "成功<br/>";
        }elseif ($res1=='2') {
            echo "没有影响到行数<br/>";
        }
        // 查询记录
        $sql="select * from user1";
        $res=$sqlconnect->excete_dql($sql);
        while ($row=$res->fetch_row()) {
            foreach ($row as $key => $value) {
                echo "---$value";
            }
            echo "<br/>";
        }
        $res->free();
        // $sqlconnect->close();
    ?>
  • 相关阅读:
    洛谷P1501 动态树(LCT)
    Beijing Institute of Technology 2019.6 Monthly Contest (For grade 2018)
    [BJOI2018]求和
    [JSOI2015]最小表示
    简单题
    [Ynoi2016]掉进兔子洞
    乘积
    飞扬的小鸟
    [CTSC2008]网络管理
    Sequence
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/7954256.html
Copyright © 2020-2023  润新知