zoukankan      html  css  js  c++  java
  • Mysql预处理语句prepare、execute、deallocate

    前言

    做CTF题的时候遇到的所以参考资料学习一波。。。。

    MySQL的SQL预处理(Prepared)

    一、SQL 语句的执行处理

    1、即时 SQL
      一条 SQL 在 DB 接收到最终执行完毕返回,大致的过程如下:
      1. 词法和语义解析;
      2. 优化 SQL 语句,制定执行计划;
      3. 执行并返回结果;
      如上,一条 SQL 直接是走流程处理,一次编译,单次运行,此类普通语句被称作 Immediate Statements (即时 SQL)。

    2、预处理 SQL
      但是,绝大多数情况下,某需求某一条 SQL 语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。
      所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。
      预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。

    二、Prepared SQL Statement Syntax

    MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT。翻译也就习惯的称其为预处理语句。
    MySQL 预处理语句的支持版本较早,所以我们目前普遍使用的 MySQL 版本都是支持这一语法的。

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

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

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

    PREPARE:准备一条SQL语句,并分配给这条SQL语句一个名字供之后调用
    EXECUTE :执行命令
    DEALLOCATE PREPARE:释放命令

    1.简单使用

    PREPARE xiaohua FROM 'SELECT ?+?'; 
    
    SET @a=1,@b=10;
    
    EXECUTE xiaohua USING @a,@b;
    
    DEALLOCATE PREPARE xiaohua;

    执行结果 :

     

    参考学习

    MySQL的SQL预处理(Prepared)

    MySQL中prepare、execute与deallocate的用法详解

    PHP MySQL 预处理语句

  • 相关阅读:
    json解析与序列化
    js实现千位分隔符
    map.(parseInt)方法详解
    js实现翻转一个字符串
    一个满屏 品 字布局 如何设计?
    new操作符实现过程
    常见的函数式编程模型
    Azure DevOps Server 2019 (TFS)安装教程
    在Azure DevOps Server (TFS) 中修改团队项目名称
    你好,Azure DevOps Server 2019;再见,Team Foundation Server
  • 原文地址:https://www.cnblogs.com/xhds/p/12274553.html
Copyright © 2011-2022 走看看