【二十】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();
?>
原文地址:https://www.cnblogs.com/8013-cmf/p/7954256.html