# 为什么要使用 Prepared Statements

__*Prepared Statement*__

+ 提高查询的性能
  + 准备一次语句并执行多次,每次使用不同的变量值
  + 服务器在准备语句时只解析一次命令
  + 客户端使用新协议发出语句请求
    + 减少服务器 CPU 开销
    + 与单独重新发送每条 SQL 语句相比,减少了服务器和客户端之间的网络通讯流量
+ 确保 SQL 命令中正确引用了数据类型
+ 避免了 SQL 注射
-----------------------------------------------------------------

当服务器准备一条语句时,它会为该语句创建一个协议。通常,客户端会将 SQL 语句和值一起传递,然后由 TiDB 服务器从原始文本字符串中解析出来。预准备语句的协议将这些值与语句的其余部分分开,并提供一种二进制机制来传输值。这比转换字符串和从字符串转换更有效。

预准备语句还有助于防止一种称为 SQL 注入的攻击。恶意用户可以将 SQL 命令插入到需要值的应用程序中。预准备语句将 SQL 命令与值分开,并防止将值解释为 SQL 语句。
