首页/数据/数据库速查/预处理语句 PREPARE / EXECUTE / DEALLOCATE
本包目录(495 条)
MySQL 基础与连接36 条
SQL 语法52 条
用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条Redis 运维与场景124 条

预处理语句 PREPARE / EXECUTE / DEALLOCATE

服务端预处理可复用于高频 SQL;应用层参数化查询(占位符)是防注入的根本手段,比手工拼接字符串安全得多。

数据库速查数据更新于 2026-10-12
用途SQL 复用与参数化
SQL 层PREPARE stmt FROM '…' / EXECUTE / DEALLOCATE PREPARE
应用层PDO / JDBC / ORM 占位符

SQL 层示例

SQL 层示例
PREPARE stmt FROM 'SELECT id, sku FROM orders WHERE user_id = ? LIMIT ?';
SET @uid = 42, @n = 10;
EXECUTE stmt USING @uid, @n;
DEALLOCATE PREPARE stmt;

应用层(参数化防注入)

应用层(参数化防注入)
cur.execute('SELECT * FROM users WHERE name = %s AND status = %s', (name, status))
服务端 prepared statement 在连接内有效,连接池中的使用要注意会话隔离。

易错点

  • 拼接 SQL 字符串永远存在注入风险,动态表名/列名无法参数化时必须白名单校验
  • 预处理语句上限受 max_prepared_stmt_count 限制,异常泄漏句柄会导致报错

数据来源与参考

  • MySQL 8.0 Reference Manual: PREPARE Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌