美文网首页
PHP基础 —— mysqli学习

PHP基础 —— mysqli学习

作者: WhiteStruggle | 来源:发表于2020-07-10 14:24 被阅读0次

    建立,关闭与MySQL服务器的连接

    MySQLi 扩展的功能概述

    连接指定的mysql服务器

    $mysqli_content = mysqli_connect($host,$user,$password,$database,$port,$socket)
    
    $host —— ip地址,服务器的地址
    $user —— 用户名,root
    $password —— MySQL的密码
    $database —— 数据库
    $port —— 端口号,一般默认3306
    $socket —— 使用很少,基本不用
    
    <?php
        $link = @mysqli_connect('localhost','root','root','php1',3306);
    ?>
    
    //由于会出现错误,为防止错误信息直接暴露在页面,可以使用@屏蔽错误
    

    连接错误时的提示

    int mysqli_connect_errno();
    // 返回最后一次连接调用的错误代码
    
    string mysqli_content_error();
    //返回一个字符串描述的最后一次连接调用的错误代码
    

    密码或用户名错误的报错:

    echo mysqli_connect_error();
    //Access denied for user 'root'@'localhost' (using password: YES)
    
    echo mysqli_connect_errno($link);
    //1045
    
    0 —— 表示连接成功
    

    设置默认字符编码

    bool mysqli_set_charset(mysqli $link , string $charset);
    

    设置成功返回 true

    mysqli_set_charset($link,'GBK');
    mysqli_set_charset($link,'utf8');//注意 utf-8 省略 ‘-’
    

    选择特定的数据库

    bool mysqli_select_db(mysqli $link,string $dbname);
    
    $link —— 建立的连接,mysqli_connect()
    $abname —— 数据库名称
    

    当没有指定数据库时,可以用此函数添加数据库

    当指定数据库,需要切换数据库:

    mysqli_select_db($link,$php2);
    

    关闭与mysql服务器的连接

    bool mysqli_close(mysqli $link);
    
    $link —— 建立的连接,mysqli_connect()
    
    mysqli_close($link);
    

    执行mysql语句

    mysqli_query()

    在数据库中执行一条MySQL语句

    mysqli_query(mysqli $link ,string $query,[int $resultmode =  MYSQLI_STORE_RESULT]);
    
    $link —— 建立的连接,mysqli_connect()
    
    $query —— 查询字符串
    
    $resultmode —— 决定获取结果的方式,可取值:               
                     MYSQLI_USE_RESULT :mysqli_fetch_array()每次都要向server请求结果行,在执行MySQL时,并没有从server将结果取出
                     MYSQLI_STORE_RESULT :默认值(较常用的),具体结果一次性返回给客户端(PHP),相当于本地取数据
    
    可选参数
    1. 对于delete,update,insert等不会返回数据的SQL语句,执行没有错误将返回true
        // 创建表
        $str = 'create table p3 (id int auto_increment primary key ,name varchar(10),class int(4),age int(3));';
        var_dump(mysqli_query($link,$str));//true
    
        // 添加数据
        $str = 'insert into p3 (name,class,age) values ("Yz",1526,25),("Zs",1506,20),("Ys",1515,22);';
        var_dump(mysqli_query($link,$str));//true
    
        // 删除表
        echo "<br>";
        $str = 'drop table p3;';
        var_dump(mysqli_query($link,$str));//true
    
    1. 对于返回数据的SQL语句,执行成功的时候返回结果 对象集合,可以使用操作结果 对象集合 的函数来从中获取数据
        // 查询
        $str = 'select * from p3';
        $result = mysqli_query($link,$str);
        var_dump($result);
        //object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(4) ["lengths"]=> NULL ["num_rows"]=> int(3) ["type"]=> int(0) }
    

    mysqli_real_query()

    执行一个mysql查询

    mysqli_real_query ( mysqli $link , string $query ) : bool
    
    $link —— 建立的连接,mysqli_connect()
    $query —— 查询字符串
    

    返回值:成功时返回 true, 否则返回 false。

        $str = 'select * from p3';
        $result = mysqli_real_query($link,$str);
        var_dump($result);//true
    

    若想获取数据,需要使用 mysqli_store_result()

    mysqli_store_result()

    转移上一次查询返回的 结果集合(对象集合)

    mysqli_store_result ( mysqli $link, [ int $option ] ) : mysqli_result
    
    $option —— 可以取值 : 
                MYSQLI_STORE_RESULT_COPY_DATA   将结果集从 mysqlnd 的内部缓冲区复制到 PHP 变量中
                默认情况下,mysqlnd 采取一种引用策略尽量避免在内容中复制多份同样的结果集。
    

    例如:

        if(mysqli_real_query($link,$str))
        {
            $result = mysqli_store_result($link,MYSQLI_STORE_RESULT_COPY_DATA);
        }
        print_r($result);//mysqli_result Object ( [current_field] => 0 [field_count] => 4 [lengths] => [num_rows] => 3 [type] => 0 )
    
    

    执行MySQL语句报错

    int mysqli_errno(mysqli $link); —— 返回报错数字码
    string mysqli_error(mysqli $link); —— 返回报错内容
    
    $str = 'create table p3 (id int auto_increment primary key ,name varchar(10),class int(4),age int(3));';
    var_dump(mysqli_query($link,$str));
        echo mysqli_errno($link).":".mysqli_error($link);//1050:Table 'p3' already exists , p3表已存在
    $str = 'insert into p3  values ("Yz",25);';
    var_dump(mysqli_query($link,$str));
        echo mysqli_errno($link).":".mysqli_error($link);//1136:Column count doesn't match value count at row 1 , 列数与第1行的值数不匹配
    
    

    mysqli_multi_query()

    一次性执行多条SQL语句,多条SQL语句用逗号分隔

    mysqli_multi_query ( mysqli $link , string $query ) : bool
    
    $query —— 多条SQL语句。
    

    返回值:当第一条语句执行就返回true

    mysqli_multi_query($link,"create table p2 (id int auto_increment primary key , class varchar(15));insert into p2 (class) values (20180612515),(20180612506),(20180612525);");
    

    mysqli_next_result

    为读取 multi_query 执行之后的下一个结果集做准备

    mysqli_next_result ( mysqli $link ) : bool
    

    mysqli_multi_query() 函数执行之后, 为读取下一个结果集做准备, 然后可以使用 mysqli_store_result() 或 mysqli_use_result() 函数读取下一个结果集。

    操作结果 对象集合 的函数

    mysqli_fetch_row()

    以索引数组的方式获取一条记录

    mixed mysqli_fetch_row(mysqli_result $result);
    
    $result —— 查询到的结果,形成的对象集合
    

    返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

    索引值为数字,从左到右从0开始

    print_r(mysqli_fetch_row($result));//Array ( [0] => 1 [1] => Yz [2] => 1526 [3] => 25 ) 
    print_r(mysqli_fetch_row($result));//Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 )
    print_r(mysqli_fetch_row($result));//Array ( [0] => 3 [1] => Ys [2] => 1515 [3] => 22 )
    

    mysqli_fetch_assoc()

    以关联数组的方式获取一条记录的数据

    array mysqli_fetch_assoc(mysqli_result $result);
    
    $result —— 查询到的结果,形成的对象集合
    

    返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

    索引值为MySQL表的列字段

    print_r(mysqli_fetch_assoc($result));//Array ( [id] => 1 [name] => Yz [class] => 1526 [age] => 25 )
    print_r(mysqli_fetch_assoc($result));//Array ( [id] => 2 [name] => Zs [class] => 1506 [age] => 20 ) 
    print_r(mysqli_fetch_assoc($result));//Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 )
    

    mysqli_fetch_array()

    以索引数组或关联数组的方式获取一条记录

    mixed mysqli_fetch_array(mysqli_result $result,[$resulttype =  MYSQLI_BOTH]);
    
    $result —— 查询到的结果,形成的对象集合
    $resulttype —— 可取值为:
                 MYSQLI_ASSOC :索引值为 MySQL列字段
                 MYSQLI_NUM : 索引值为数字
                 MYSQLI_BOTH : 默认值,索引值为数字和MySQL列字段
    

    返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

    默认情况下 —— 索引值为数字和MySQL列字段,每行每列先存储数字索引,然后是MySQL列字段索引,接着下一列······

    print_r(mysqli_fetch_array($result));//Array ( [0] => 1 [id] => 1 [1] => Yz [name] => Yz [2] => 1526 [class] => 1526 [3] => 25 [age] => 25 )
        
    print_r(mysqli_fetch_array($result,MYSQLI_NUM));//Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 ) 
        
    print_r(mysqli_fetch_array($result,MYSQLI_ASSOC));//Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 )
    

    mysqli_fetch_all()

    以索引数组或关联数组的方式获取全部记录的数据

    mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] ) ;
    
    $result —— 查询到的结果,形成的对象集合
    $resulttype —— 可取值为:
                 MYSQLI_ASSOC :索引值为 MySQL列字段
                 MYSQLI_NUM : 索引值为数字
                 MYSQLI_BOTH : 默认值,索引值为数字和MySQL列字段
    

    返回值查询结果的所有数据,每一行组成一个数组,所有行组成一个二维数组

    索引值为MySQL列字段

    print_r(mysqli_fetch_all($result,MYSQLI_ASSOC));
    //Array ( [0] => Array ( [id] => 1 [name] => Yz [class] => 1526 [age] => 25 ) [1] => Array ( [id] => 2 [name] => Zs [class] => 1506 [age] => 20 ) [2] => Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 ) )
    

    索引值为数字,默认情况

    //print_r(mysqli_fetch_all($result));
    print_r(mysqli_fetch_all($result,MYSQLI_NUM));
    //Array ( [0] => Array ( [0] => 1 [1] => Yz [2] => 1526 [3] => 25 ) [1] => Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 ) [2] => Array ( [0] => 3 [1] => Ys [2] => 1515 [3] => 22 ) )
    

    索引值为数字和MySQL列字段,每行每列先存储数字索引,然后是MySQL列字段索引,接着下一列······

    print_r(mysqli_fetch_all($result,MYSQLI_BOTH));
    //Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => Yz [name] => Yz [2] => 1526 [class] => 1526 [3] => 25 [age] => 25 ) [1] => Array ( [0] => 2 [id] => 2 [1] => Zs [name] => Zs [2] => 1506 [class] => 1506 [3] => 20 [age] => 20 ) [2] => Array ( [0] => 3 [id] => 3 [1] => Ys [name] => Ys [2] => 1515 [class] => 1515 [3] => 22 [age] => 22 ) )
    

    mysqli_fetch_filed()

    返回集合中的下一个字段信息

    object mysqli_fetch_filed(mysqli_result $result);
    
        $str = 'select id num,name byte,class grade,age egg from p3 php3';
        $result = mysqli_query($link,$str);
        print_r(mysqli_fetch_field($result));
        //stdClass Object ( [name] => num [orgname] => id [table] => php3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 1 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 )
    

    返回值:

    • name —— 列的别名,查询时声明的
    • orgname —— 原始列名
    • table —— 表的别名,查询时声明的
    • orgtable ——原始表名
    • def —— 保留默认值,当前始终为“”
    • db —— 数据库的名称
    • catlog —— 目录名,总是“def”(因为PHP 5.3.6)
    • max_length —— 结果集的字段的最大宽度。
    • length —— 在表定义中指定的字段宽度。
    • charsetnr —— 字段的字符集编号。
    • flags —— 表示该字段的位标志的整数。
    • type —— 用于此字段的数据类型
    • decimals —— 使用的小数位数(用于整数字段)

    获取对象集合中的数据:
    每次返回一列字段信息

    $object = mysqli_fetch_field($result);
        
    echo $object->name;//num
    echo $object->orgtable;//p3
    

    mysqli_fetch_fileds()

    返回表中所有字段的对象数组,组成一个结果集合

    array mysqli_fetch_fileds(mysqli_result $result);
    
    print_r(mysqli_fetch_fields($result));
    // Array ( [0] => stdClass Object ( [name] => num [orgname] => id [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 1 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 ) 
    //         [1] => stdClass Object ( [name] => byte [orgname] => name [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 2 [length] => 30 [charsetnr] => 33 [flags] => 0 [type] => 253 [decimals] => 0 ) 
    //         [2] => stdClass Object ( [name] => grade [orgname] => class [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 4 [length] => 4 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 ) 
    //         [3] => stdClass Object ( [name] => egg [orgname] => age [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 2 [length] => 3 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 ) )
    

    获取数据(先以数组方式获取对象集合,然后利用对象获取数据):

        $object =mysqli_fetch_fields($result);
        for($i=0;$i<=3;$i++){
            echo $object[$i]->orgname.',';
            //id,name,class,age,
        }
    

    mysqli_num_rows()

    获取结果中行的数量

    int mysqli_num_rows(mysqli_result $result);
    
    echo(mysqli_num_rows($result));//3
    

    使用mysqli_query()设置参数MYSQLI_USE_RESULT模式必须在获取完结果集才可以使用此函数

        $str = 'select id num,name byte,class grade,age egg from p3';
        $result = mysqli_query($link,$str,MYSQLI_USE_RESULT);
        print_r(mysqli_fetch_assoc($result));//第一行
        echo(mysqli_num_rows($result));//报错
        print_r(mysqli_fetch_assoc($result));//第二行
        echo(mysqli_num_rows($result));//报错
        print_r(mysqli_fetch_assoc($result));//第三行
        echo(mysqli_num_rows($result));//报错
        print_r(mysqli_fetch_assoc($result));
        echo(mysqli_num_rows($result));//3
    

    释放对象集合

    返回的结果集合在数据量较大的时候需要很多的内存支持,所以需要在操作完结果集合之后释放其所占的内存,释放之后,结果集不可以

    void mysqli_free_result(mysqli_result $result);
    

    例如:

    mysqli_free_result($result);
    echo(@mysqli_num_rows($result));//会报错
    

    其他常用函数

    mysqli_affected_rows()

    获取上一个MySQL操作中受影响的行数

    mysqli_affected_rows ( mysqli $link ) : int
    

    例如:

    //改变了第二行数据,影响了第一行
        $str = 'update p3 set name = "zhao" where id = 2;';
        if(mysqli_query($link,$str))
        {
            echo mysqli_affected_rows($link);//1
        }
    

    mysqli_insert_id()

    获取从之前的insert操作生成的ID

    mysqli_stmt_insert_id ( mysqli $link ) : mixed
    
        $str = 'insert p3 values (10,"ws",1506,20);';
        if(mysqli_query($link,$str))
        {
            echo mysqli_insert_id($link);//10
        }
    

    mysqli_real__string

    转义用于SQL语句中的特殊字符,防止SQL语句出错

    mysqli_real_escape_string ( mysqli $link , string $escapestr ) : string
    
    
    $escapest —— 需要转义的字符串
    

    返回值 : 转义后的字符串。

    也可以使用

    addslashes(string $escapestr) : string
    
        $s = <<<end
        "dwdw"wdw"wdwd;"dw'q'd"d'w@dW"wdwq"
        end;
        $s = mysqli_real_escape_string($link,$s);
        // $s = addslashes($s);
        // echo $s;
        $str = "alter table p3 modify column name varchar(255);";
        mysqli_query($link,$str);
        $str = "insert into p3 (name,class,age) values ('{$s}',1506,20)";//刚开始设置的长度太小
        if(mysqli_query($link,$str))
        {
            echo $s;//\"dwdw\"wdw\"wdwd;\"dw\'q\'d\"d\'w@dW\"wdwq\"
        }
        else{
            //没有转义,会报错
            echo mysqli_errno($link).":".mysqli_error($link);
            //1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '},1506,20)' at line 1
        }
    

    预处理语言机制

    针对重复执行相似语句的情况,可以将整个语句只向MySQL服务器发送一次,以后只改变参数,这样减少了需要传输的数据量,还提高了语句的处理效率

    //连接数据库,并创建一个表
    <?php
        //连接数据库
        $link = mysqli_connect('localhost','root','888888','php1',3306);
        if(mysqli_connect_errno($link)){
            echo mysqli_connect_error();
        }
        else{
            echo '连接成功';
        }
        mysqli_set_charset($link,'utf8');
    
        $query = "create table p4 (id int auto_increment primary key ,name varchar(25),class int)";
        if(mysqli_query($link,$query)){
            echo "表创建成功";
        }
        else{
            echo mysqli_errno($link).":".mysqli_error($link);
        }
    

    mysqli_prepare()

    准备执行一个 SQL 语句

    准备SQL语句,存在占位符 ,来代表各种需要修改的数据

    mysqli_prepare( mysqli $link,string $query)  : mysqli_stmt
    

    mysqli_prepare() 返回一个 statement 对象,如果发生错误则返回 false。

    $query = " insert into p4 (name , class) values (?,?) ";
    $stmt = mysqli_prepare($link,$query);
    print_r($stmt);
    //mysqli_stmt Object ( [affected_rows] => 0 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 0 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 1 )
    

    报错类型

    mysqli_stmt_errno ( mysqli_stmt $stmt ) : int
    mysqli_stmt_error ( mysqli_stmt $stmt ) : string
    

    mysqli_stmt_bind_param ()

    将变量绑定到准备好的语句作为参数

    即 stmt类型 的 绑定变量

    mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var1 [mixed &$... ] ) : bool
    

    $stmt —— 一个 statement 对象

    $type 取值:

    Character Description
    i 对应的变量具有整数类型
    d 对应的变量具有小数类型
    s 对应的变量具有字符串类型
    b 对应的变量是blob,将以数据包形式发送

    &$var1 —— 与前边type对应,同时匹配 所对应的参量

    返回值:成功时返回 true, 或者在失败时返回 false。

    var_dump(mysqli_stmt_bind_param($stmt,'si',$val_1,$val_2));//true
    $val_1 = "小明";
    $val_2 = 31122110;
    

    mysqli_stmt_execute()

    执行准备好的 SQL语句

    mysqli_stmt_execute ( mysqli_stmt $stmt ) : bool
    

    返回值:成功时返回true ,否则false

    var_dump(mysqli_stmt_execute($stmt));//true
    

    多次执行,只需要赋值,并使用mysqli_stmt_execute()执行语句

    $val_1 = "小双";
    $val_2 = 31200000;
    var_dump(mysqli_stmt_execute($stmt));//true
    

    传参例子

    //准备执行一条SQL语句
        $query = " insert into p4 (name , class) values (?,?) ";
        $stmt = mysqli_prepare($link,$query);
        
    // 给? 绑定变量
        var_dump(mysqli_stmt_bind_param($stmt,'si',$val_1,$val_2));
    //变量赋值
        $val_1 = "小明";
        $val_2 = 31122110;
    //执行准备好的SQL语句
        var_dump(mysqli_stmt_execute($stmt));
    //继续执行SQL语句
        $val_1 = "小双";
        $val_2 = 31200000;
        var_dump(mysqli_stmt_execute($stmt));
    
    

    mysqli_stmt_bind_result()

    将查询出的数据绑定到PHP变量

    将变量绑定到准备好的语句以存储结果

    mysqli_stmt_bind_result( mysqli_stmt $stmt , mixed &$var1 [mixed &$... ] ) : bool
    

    返回值:成功时返回true ,否则false

        mysqli_stmt_bind_result($stmt,$id,$name,$class);
    //要查询的字段都要加列出来
    

    mysqli_stmt_fetch()

    从一个prepare 语句中抓取结果到指定变量中

    mysqli_stmt_fetch( mysqli_stmt $stmt ) : bool
    

    返回值:成功时返回true ,否则false

    mysqli_stmt_fetch($stmt);
    

    查询例子

    //准备一条SQL语句
        $query = "select * from p4 where id = ?";
        $stmt = mysqli_prepare($link,$query);
    //绑定变量
        var_dump(mysqli_stmt_bind_param($stmt,"s",$val));
    //执行准备好的SQL语句
        $val = 3;
        var_dump(mysqli_stmt_execute($stmt));
    //将查询出的数据绑定到PHP变量
        mysqli_stmt_bind_result($stmt,$id,$name,$class);
    //从一个prepare 语句中抓取结果到指定变量中
        mysqli_stmt_fetch($stmt);
    //引用变量获取结果
        echo $id."-".$name."-".$class;
    //结果:1-小明-31122110
    

    改进方案:

    查询到多条结果,进行输出

        $query = "select * from p4 where id < ?";
        $stmt = mysqli_prepare($link,$query);
    
        var_dump(mysqli_stmt_bind_param($stmt,"s",$val));
    
        $val = 3;
        if(mysqli_stmt_execute($stmt)){
            mysqli_stmt_bind_result($stmt,$id,$name,$class);
            while(mysqli_stmt_fetch($stmt))
            {
                echo "<br>".$id."-".$name."-".$class;
            }
        }
    //结果:
    //1-小明-31122110
    //2-小明-31122110
    
        $val = 5;
        if(mysqli_stmt_execute($stmt)){
            mysqli_stmt_bind_result($stmt,$id,$name,$class);
            while(mysqli_stmt_fetch($stmt))
            {
                echo "<br>".$id."-".$name."-".$class;
            }
        }
    //结果:
    //1-小明-31122110
    //2-小明-31122110
    //3-小明-31122110
    //4-小双-31200000
    

    mysqli_stmt_result_metadata()

    返回结果集合,配合相关函数,来可以获取字段的相关信息

    mysqli_stmt_result_metadata(mysqli_stmt $stmt) : mysqli_result
    

    返回值为集合对象,

    配合使用的函数:

    mysqli_num_fields()
    
    mysqli_fetch_field()
    
    mysqli_fetch_field_direct()
    
    mysqli_fetch_fields()
    
    mysqli_field_count()
    
    mysqli_field_seek()
    
    mysqli_field_tell()
    
    mysqli_free_result()
    
        $query = "select * from p4 where id < ?";
        $stmt = mysqli_prepare($link,$query);
    
        var_dump(mysqli_stmt_bind_param($stmt,"s",$val));
    
        $val = 3;
        if(mysqli_stmt_execute($stmt)){
            $result = mysqli_stmt_result_metadata($stmt);
            print_r(mysqli_fetch_fields($result));
    //Array ( [0] => stdClass Object ( [name] => id [orgname] => id [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 ) 
    //        [1] => stdClass Object ( [name] => name [orgname] => name [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 75 [charsetnr] => 33 [flags] => 0 [type] => 253 [decimals] => 0 ) 
    //        [2] => stdClass Object ( [name] => class [orgname] => class [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 11 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 ) )
        }
    

    mysqli_stmt_store_result()

    从准备好的语句传输结果集

    mysqli_stmt_store_result ( mysqli_stmt $stmt ) : bool
    
    $stmt ——  仅以过程化样式:由 mysqli_stmt_init() 返回的 statement 标识。
    

    返回值:成功时返回true ,否则false

    mysqli_stmt_num_rows()

    返回语句结果集合的行数

    mysqli_stmt_num_rows(mysqli_stmt $stmt ) : int
    
    //查询有几条数据,需要mysqli_stmt_store_result($stmt)和mysqli_stmt_num_rows($stmt)配合使用
    
        $query = "select * from p4 where id < ?";
        $stmt = mysqli_prepare($link,$query);
    
        var_dump(mysqli_stmt_bind_param($stmt,"s",$val));
    
        $val = 3;
        if(mysqli_stmt_execute($stmt)){
            echo mysqli_stmt_store_result($stmt);//1
            echo mysqli_stmt_num_rows($stmt);//2
        }
    

    mysqli_stmt_free_result()

    释放给定语句处理存储的结果集合所占内存

    mysqli_stmt_free_result ( mysqli_stmt $stmt ) : void
    

    没有返回值

    释放与该语句关联的结果内存,该内存由mysqli_stmt_store_result()分配。

    mysqli_stmt_close()

    关闭一个prepared语句,即关闭准备好的语句

    mysqli_stmt_close ( mysqli_stmt $stmt ) : bool
    

    返回值:成功时返回true ,否则false

    var_dump(mysqli_stmt_close ($stmt ));
    

    相关文章

      网友评论

          本文标题:PHP基础 —— mysqli学习

          本文链接:https://www.haomeiwen.com/subject/bchmcktx.html