• php mysql语句预编译(preparestatement)


    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

    预处理语句的工作原理如下:

    1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:

      INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
    2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。

    3. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

    相比于直接执行SQL语句,预处理语句有两个主要优点:

    • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。

    • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。

    • 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

    下面附上DML(insert delete update)和DQL(select)语句的预处理代码

    DML预处理:

    //预处理1--操作数据库
    $mysqli = new mysqli('localhost','root','mayi1991','mysqldemo');
    $mysqli->query('set names utf8');
    //创建预编译对象
    $mysqli_stmt = $mysqli->prepare("insert account (balance,name) values (?,?)");
    //绑定参数
    $balance = 122;
    $name = '小白';
    $mysqli_stmt->bind_param("ds",$balance,$name);
    //$mysqli_stmt->bind_param("ds",122,'小白');    //这样是错误的,我也不知道为啥子
    //执行 返回boolean值
    $mysqli_stmt->execute();

    DQL预处理:

    //预处理2--查询数据库
    //创建预处理对象
    $mysqli_stmt = $mysqli->prepare('select name,balance from account where id < ?');
    //绑定参数
    $id = 5;
    $mysqli_stmt->bind_param('i',$id);
    //执行
    $mysqli_stmt->execute();
    //绑定结果集
    $mysqli_stmt->bind_result($name,$balance);  //这里的变量指向的是内存地址
    //输出结果集
    while($mysqli_stmt->fetch()){
        echo "$name--$balance";
    }

    ok,就酱紫喽

  • 相关阅读:
    前端学习笔记之闭包——看了一张图终于明白啥是闭包了
    前端学习笔记之闭包——看了一张图终于明白啥是闭包了
    前端学习笔记之闭包——看了一张图终于明白啥是闭包了
    前端学习笔记之闭包——看了一张图终于明白啥是闭包了
    Unity碰撞检测
    Unity碰撞检测
    Unity碰撞检测
    Unity碰撞检测
    关于JavaScript中事件的一些重要说明
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/minigrasshopper/p/7805006.html
Copyright © 2020-2023  润新知