PHP 使用mysqli与MySQL交互

14 篇文章 0 订阅
13 篇文章 0 订阅
本文详细介绍了如何使用PHP的mysqli扩展与MySQL进行交互,包括建立和关闭连接、执行SQL语句、处理结果集,以及预处理语句机制。重点讲解了各种函数的用法,如连接数据库、设置字符编码、处理结果集、预处理语句的绑定和执行等。
摘要由CSDN通过智能技术生成

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

连接指定的mysql服务器

  • $link = @mysqli_connect($host, $user, $password, $database, $port);

连接错误时的提示

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

设置默认字符编码

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


选择特定的数据库

bool mysqli_select_db(mysqli $link, string $dbname);


关闭与mysql服务器的连接

bool mysqli_close(mysql $link);

<?php
    header("Content-type:text/html; charset=utf-8");
    // 与MySQL数据库建立连接
    $link = @mysqli_connect('localhost', 'root', '123456', '', 3306);

    // 连接错误时提示
    if(mysqli_connect_errno()){
        exit(mysqli_connect_error());
    };

    // 设置默认字符编码
    mysqli_set_charset($link, 'utf8');

    // 选择特定的数据库
    mysqli_select_db($link, 'd4');

    // 关闭与mysql服务器的链接
    mysqli_close($link);
?>

执行SQL语句、结果集处理

对数据库执行一条SQL语句

mixed mysqli_query(mysql $link, string $query [, MYSQLI_STORE_RESULT]);

  • 对于insert,update,delete等不会返回数据的SQL语句,在执行没有错误时将返回true
  • 对于select等返回数据的SQL语句执行成功的时候,会返回结果集对象,可以使用操作结果集对象的函数来从中获取数据
  • 第三个参数可选:MYSQL_STORE_RESULT(默认,常用)、MYSQLI_USE_RESULT:该参数决定了mysqli client和sever之间取结果集的方式;前者模式是具体的结果集一次性放回给客户端;后者是将具体的结果集留在服务器端(MySQL),然后PHP这边使用一条一条取数据的函数,一次一次的到MySQL取数据

bool mysqli_real_query(mysqli $link, string $query);

  • 也可以使用本函数对数据库执行一条SQL语句,返回结果为布尔值,不返回结果集
  • 如果想获取结果集,可以使用mysqli_store_result()获取结果集对象

int mysqli_errno(mysqli $link); / string mysqli_error(mysqli $link);

  • 如果在执行SQL语句的时候发生错误,以上两个函数都将返回false,并且可以使用以上函数处理错误原因,前者返回错误代码,后者返回具体错误地方

操作结果集对象的函数

从结果集对象中解析数据的常见函数

  • mixed mysqli_fetch_row(mysqli_result $result);:以索引数据的方式获取一条记录的数据,重复使用以获取下一条记录的数据
  • array mysqli_fetch_assoc(mysqli_result $result);:以关联数组的方式获取一条记录的数据,重复使用以获取下一条记录的数据
  • mixed mysqli_fetch_array(mysqli_result $result, [, MYSQLI_BOTH]);:以索引数组或关联数组的方式获取一条记录的数据,第二个参数可选值:MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH(默认)
  • mixed mysqli_fetch_all(mysqli_result $result [, MYSQLI_NUM]);:以索引数组或关联数组的方式获取全部记录的数据,第二参数同上
  • object mysqli_fetch_field(mysqli_result $result);:返回结果集中的下一个字段信息
  • array mysqli_fetch_fields(mysqli_result $result);:返回一个代表结果集字段的对象数组
  • int mysqli_num_rows(mysqli_result $result);:获取结果中行的数量;注意:如果使MYSQLI_USE_RESULT模式,则必须在获取完所有的结果集才可使用该函数

释放与一个结果集相关的内存

  • void mysqli_free_result(mysqli_result $result);:返回的结果集在数据量很大的时候需要很多的内存支持,所以在操作结果集的时候有必要立刻释放与一个结果集相关的内存,释放之后,结果集就不可用了
<?php
    header("Content-type:text/html; charset=utf-8");
    // 与MySQL数据库建立连接
    $link = @mysqli_connect('localhost', 'root', '123456', '', 3306);

    // 连接错误时提示
    if(mysqli_connect_errno()){
        exit(mysqli_connect_error());
    };

    // 设置默认字符编码
    mysqli_set_charset($link, 'utf8');

    // 选择特定的数据库
    mysqli_select_db($link, 'd4');

    // =============对数据库执行一条查询语句==========================
    $query = 'select * from t1';
    $result = mysqli_query($link, $query);
    var_dump($result);

    // ==============操作结果集对象的函数=======================
    
    // +++++++++从结果集对象中解析获取一条记录的数据++++++++++++++
    
    // ---------以索引数据的方式获取一条记录的数据----------------
    // while($data = mysqli_fetch_row($result)){
    //     var_dump($data);
    // }

    // ---------以关联数组的方式获取一条记录的数据-----------------
    // var_dump(mysqli_fetch_assoc($result));
    // var_dump(mysqli_fetch_assoc($result));
    // var_dump(mysqli_fetch_assoc($result));

    // ---------以索引数组或关联数组的方式获取一条记录的数据---------
    // 第二个参数可选值:MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH(默认)
    // var_dump(mysqli_fetch_array($result, MYSQLI_ASSOC));
    // var_dump(mysqli_fetch_array($result, MYSQLI_NUM));
    // var_dump(mysqli_fetch_array($result, MYSQLI_BOTH));

    // --------以索引数组或关联数组的方式获取全部记录的数据
    // var_dump(mysqli_fetch_all($result, MYSQLI_NUM));

    // --------返回结果集中的下一个字段信息-----------------------
    // var_dump(mysqli_fetch_field($result));
    // var_dump(mysqli_fetch_field($result));
    
    // --------返回一个代表结果集字段的对象数组--------------------
    // var_dump(mysqli_fetch_fields($result));

    // --------获取结果中行的数量---------------------------------
    var_dump(mysqli_num_rows($result));

    // ===============释放与一个结果集相关的内存===================
    mysqli_free_result($result);

    // 关闭与mysql服务器的链接
    mysqli_close($link);
?>

其他常用函数

  • int mysqli_affected_rows(mysqli $link);:获取前一个MySQL操作受影响行数
  • mixed mysqli_insert_id(msqli $link);:返回最后一次操作自动生成并使用的id
  • string mysqli_multi_query(mysqli $link, string $query);:转义用于SQL语句中的特殊字符防止SQL语句出错

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

  • bool mysqli_multi_query(mysqli $link, string $query);

预处理语句机制

insert、update,delete等不会返回数据的SQL语句

准备一个用于执行的SQL语句

  • $query = ‘insert into t1(id, info) values(?, ?);’:准备的SQL语句里面使用占位符号?,来代表要改变的参数
  • $stmt = mysqli_prepare($link, $query);:准备要执行的SQL语句

将变量作为参数绑定到perpared语句上

  • bool mysqli_stmt_bind_param($stmt, $types, $val1, $val2, … );:为 ?占位符绑定变量;参数 $types:表示后面多个可选参数变量的数据类型,i:int类型;d:double或者float类型;s:字符串类型;b:二进制数据类型

执行一个prepared准备好的语句

  • bool mysqli_stmt_execute($stmt);
<?php
    header("Content-type:text/html; charset=utf-8");
    // 与MySQL数据库建立连接
    $link = @mysqli_connect('localhost', 'root', '123456', '', 3306);

    // 连接错误时提示
    if(mysqli_connect_errno()){
        exit(mysqli_connect_error());
    };

    // 设置默认字符编码
    mysqli_set_charset($link, 'utf8');

    // 选择特定的数据库
    mysqli_select_db($link, 'd4');

    // -------------------预处理语句--------------------
    // 准备要执行的SQL语句
    $query = 'insert into t1(id, info) values(?, ?)';
    $stmt = mysqli_prepare($link, $query);

    // 为?占位符绑定变量
    mysqli_stmt_bind_param($stmt, 'is', $val1, $val2);

    $val1 = 29;
    $val2 = "行不行?";
    // 执行准备好的SQL语句
    var_dump(mysqli_stmt_execute($stmt));

    $val1 = 30;
    $val2 = "OK?";
    // 执行准备好的SQL语句
    var_dump(mysqli_stmt_execute($stmt));

    // 关闭与mysql服务器的链接
    mysqli_close($link);
?>

select之类返回数据的SQL语句

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

  • bool mysqli_stmt_bind_result($stmt, $var1, $var2, … );

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

  • bool mysqli_stmt_fetch($stmt);

从一个prepared语句返回结果集元数据,配合相关函数,可以用来获得字段的相关信息

  • mysqli_stmt_result_metadata($stmt);

    1、mysqli_fetch_field();
    2、mysqli_fetch_fields();

取回一个结果集

  • bool mysqli_stmt_store_result($stmt);:取回之后可以使用mysqli_stmt_num_rows($stmt);返回语句结果集中的行数

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

  • void mysqli_stmt_free_result($stmt);

关闭一个prepared语句

  • bool mysqli_stmt_dose($stmt);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值