MySQL 8.0支持服务器端预处理语句。这种支持利用了有效的客户端/服务器二进制协议。对参数值使用带占位符的预处理语句具有以下好处:每次执行语句时解析语句的开销都较小。通常,数据库应用程序处理大量几乎相同的语句,仅对子句中的文字或变量值进行更改,例如WHERE查询和删除,SET更新和VALUES插入。
防止SQL注入攻击。参数值可以包含未转义的SQL引号和定界符。
应用程序中的预处理的语句
您可以通过客户端编程接口使用服务器端预处理的语句,包括用于C程序的MySQL C API客户端库,用于Java程序的MySQL Connector / J和用于使用.NET技术的程序的MySQL Connector / NET。例如,C API提供了一组函数调用,这些函数构成了其预处理的语句API。请参见“ C API预处理语句”。其他语言接口可以通过在C客户端库中进行链接来为使用二进制协议的预处理的语句提供支持,其中一个示例就是mysqli extension,在PHP 5.0及更高版本中可用。
SQL脚本中的预备语句
提供了预处理的语句的替代SQL接口。此接口的效率不如通过预预处理的语句API使用二进制协议有效,但不需要编程,因为它可以直接在SQL级别使用:如果没有可用的编程接口,则可以使用它。
您可以从任何可以将SQL语句发送到要执行的服务器的程序(例如mysql客户端程序)中使用它。
即使客户端使用旧版本的客户端库,也可以使用它,只要您连接到运行MySQL 4.1或更高版本的服务器即可。
预处理语句的SQL语法旨在用于以下情况:在对预备语句进行编码之前,先对其进行测试。
在无权访问支持它们的编程API时使用预处理的语句。
使用预处理的语句以交互方式解决应用程序问题