MySQL 预处理语句2025年3月29日 | 阅读 5 分钟 在 MySQL 4.1 版本之前,每个查询都以文本格式发送到 MySQL 服务器,并使用文本协议将数据返回给客户端。在将结果返回给客户端之前,MySQL 会完全解析查询并将结果集转换为字符串。这里的解析意味着提交的查询经过语法和语义验证,并且权限也经过验证。 将数据返回给客户端的文本协议存在严重的性能问题。为了克服这个问题,MySQL 从 4.1 版本开始提供了一个名为预处理语句的新功能。 预处理语句或参数化语句用于高效地重复执行相同的语句。它利用了客户端/服务器二进制协议。预处理语句将包含占位符 (?) 的查询传递给 MySQL 服务器。请看下面的示例 当 MySQL 使用不同的 studentId 值执行上述语句时,它无法完全解析该语句。因此,MySQL 将更快地执行该语句,尤其是在多次执行相同查询时。 预处理语句包含占位符 (?),这有助于避免许多 SQL 注入变体,使我们的应用程序更加安全。 预处理语句的优点以下是 MySQL 中预处理语句的优点
预处理语句的基本工作流程预处理语句的基本工作流程主要包括两个阶段。但是,它有一个可选阶段,总结如下
PREPARE 阶段在准备阶段,语句模板被发送到数据库服务器。服务器执行语法检查并初始化内部服务器资源以供以后使用。简而言之,它为执行准备语句。 语法 以下是准备阶段的语法 EXECUTE 阶段在执行阶段,客户端绑定参数值并将其发送到服务器。服务器根据语句模板和绑定值创建语句,并使用先前创建的内部资源执行它。简而言之,一旦预处理语句准备好查询,我们就可以执行该查询了。 语法 以下是执行预处理语句的语法 DEALLOCATE/DROP 阶段这是最后一个可选阶段,用于释放预处理语句。 语法 以下是释放预处理语句的语法 预处理语句的相关要点
MySQL 预处理语句示例让我们通过一些示例来了解如何使用 MySQL 预处理语句。 这里,我们将借助 PREPARE 语句直接创建语句,如下所示 接下来,我们将两个值分配给两个变量,这些变量可以用作占位符 (?)。 现在,我们可以借助 EXECUTE 语句执行查询 执行后,我们将得到结果为和。请看下图以了解结果 ![]() 以下示例将使用来自示例数据库的 employee 表,该表包含以下数据。 ![]() 首先,我们将准备一个语句,该语句返回由员工 id 指定的员工 姓名 和 职位 接下来,我们需要声明一个名为 id 的变量并将其值设置为 '1' 现在,我们可以借助 EXECUTE 语句执行预处理语句 执行后,我们将得到包含员工姓名和职位的结果。请看下图以了解查询执行 ![]() 再次,我们将为变量 id 分配另一个值 现在,使用新的员工 id 执行预处理语句。我们将看到以下输出 ![]() 最后,我们可以手动释放预处理语句。但是,当会话关闭时,它们将自动删除。 如果在执行上述查询后尝试执行预处理语句,我们将收到如下错误 ![]() 如何在存储过程中使用预处理语句?我们可以通过将其写入 BEGIN 和 END 块中来在存储过程中使用预处理语句。我们可以通过创建一个示例来理解它,该示例通过将表名作为存储过程的参数来返回表中的所有记录。 如下所示创建存储过程 请看下图以执行存储过程 ![]() 成功创建后,我们可以通过指定表名作为其参数来调用此过程。 它将显示表的所有记录。请看下图 ![]() 语句 vs 预处理语句以下是 MySQL 中语句和预处理语句的主要区别
存储过程 vs 预处理语句以下是 MySQL 中存储过程和预处理语句的主要区别
下一主题MySQL 字面量 |
我们请求您订阅我们的新闻通讯以获取最新更新。