`
alex1960
  • 浏览: 62763 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

MySql 动态语句执行

 
阅读更多

从MySQL 5.0 开始,
支持了一个全新的SQL句法:
PREPARE stmt_name FROM preparable_stmt;
EXECUTE stmt_name [USING @var_name [, @var_name] ...];
通过它,我们就可以实现类似 MS SQL 的 sp_executesql 执行动态SQL语句!
同时也可以防止注入式攻击

例子:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN ids VARCHAR(8000))

BEGIN

IF ids IS NOT NULL AND LENGTH(ids) > 0 THEN

SET @SqlCmd = 'SELECT *  FROM tb_tables t WHERE id IN(';

SET @SqlCmd = CONCAT(@SqlCmd , ids);

SET @SqlCmd = CONCAT(@SqlCmd , ')');

PREPARE stmt FROM @SqlCmd;

EXECUTE stmt;

ELSE

SELECT *  FROM tb_tables t;

END IF; 

    END

 

CALL test('\'123\',\'321\',\'456\'')

是 5.0.7 或者更高的,你还可以在 LIMIT 子句中使用它,
示例如下:mysql> SET @a=1;mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";

                 mysql> EXECUTE STMT USING @a;

 

 

                 mysql> SET @skip=1; SET @numrows=5;

                 mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";

                 mysql> EXECUTE STMT USING @skip, @numrows;

使用 PREPARE 的几个注意点:
A: PREPARE stmt_name FROM preparable_stmt; 预定义一个语句,并将它赋给 stmt_nameD:
PREPARE stmt_name 的作用域是当前客户端连接会话可见。
E:
要释放一个预定义语句的资源,可以使用 DEALLOCATE PREPARE 句法。F:EXECUTE stmt_name 句法中,如果 stmt_name 不存在,将会引发一个错误。G:如果在终止客户端连接会话时,没有显式地调用 DEALLOCATE PREPARE 句法释放资源,服务器端会自己动释放它。
H:在预定义语句中,CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。
G:PREPARE 语句不可以用于存储过程,自定义函数!但从 MySQL 5.0.13 开始,它可以被用于存储过程,仍不支持在函数中使用!

分享到:
评论

相关推荐

    Python-MysqlMonitor一款监控mysql执行语句的工具

    MysqlMonitor 一款监控mysql执行语句的工具

    MYsql远程调用执行MYsql语句

    支持本地 远程 域名方式连接数据库 并执行MYsql语句,带返回信息 一共3条命令 连接数据库 远程执行SQL语句 关闭数据库连接 变量 DLL路径 = “插件放置的路径” 文本型 变量 IP = “数据库的IP地址,支持域名” 文本...

    mysql批量修改语句

    mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改

    Mysql 语句执行监控器

    Mysql 语句执行监控器 监控每条MYSQL语句 调试用的``````````````

    常用MySQL执行语句

    简单常用的一些MySQL执行语句,可用于小站开发

    MySQL mysql_query 函数执行SQL语句.docx

    MySQL mysql_query 函数执行SQL语句.docx

    mysql修改语句-mysql

    mysql修改语句 在 MySQL中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。...【实例 1】在 tb_courses_new 表中,更新所有行的 course_grade 字段值为 4,输入的 SQL 语句和执行结果如下所

    MySQL数据库后端语句执行监测工具

    MySQL语句执行监测

    Python语句实现Mysql多条插入语句

    本代码,用python语句,实现了一次插入多条sql语句。希望能对大家带来帮助。

    mysql update语句的执行过程详解

    以前有过一篇关于MySQL查询语句的执行过程,这里总结一下update语句的执行过程。由于update涉及到数据的修改,所以,很容易推断,update语句比select语句会更复杂一些。 1,准备 创建一张test表 CREATE TABLE `...

    连接mysql,及简单sql语句执行

    连接mysql

    Effective MySQL之SQL语句最优化

    《Effective MySQL之SQL语句最优化》是由MySQL专家Ronald Bradford撰著,书 中提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧 做了详细的解释。本书希望能够通过一步步详细介绍SQL优化...

    sql和MySQL的语句执行顺序分析

    本文就sql和mysql的语句执行顺序问题向大家作了详细介绍,小编觉得挺不错的,这里分享下,供大家参考。

    Effective MySQL之SQL语句最优化(高清)

    《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...

    mysql数据库CPU高,实时抓住数据库执行中的SQL语句,shell工具(支持mysql5.7)

    #适用于实时查询mysql占用CPU高的语句,循环监控mysql进程情况,当CPU大于一定的前执行中的SQL情况. #执行前,修改ENV认证部分 #编写:Chaoren #2022年3月4日18:38:53 # #对于执行时间非常短的SQL可能监控到的语句...

    MySQL prepare语句的SQL语法

    /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ; PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。preparable_stmt可以是一个...

    MySQL查询语句常见操作语句格式代码.docx

    mysql查询语句汇总 MySQL作为流行的关系型数据库管理系统,其查询语句的...聚合函数在MySQL中用于对一组值执行计算,并返回单个值。常见的聚合函数有COUNT(), SUM(), AVG(), MAX(), 和 MIN()等。结合GROUP BY子句,可以

    MySQL数据库:流程控制语句while语句.pptx

    MySQL支持3条用来创建循环的语句:WHILE、REPEAT和LOOP语句。 WHILE语句语法格式为: [begin_label:] WHILE search_condition DO statement_list END WHILE [end_label] 说明:语句首先判断search_condition是否为真...

    mysql查询语句汇总.docx

    mysql查询语句汇总 MySQL查询语句是数据库操作的核心部分,涵盖了数据的增删改查等多个方面。由于篇幅限制,我将尽量简洁而全面地介绍MySQL查询语句的各个方面,以满足您的需求。 一、基础查询 基础查询是最常用的...

    php+MySQL判断update语句是否执行成功的方法

    update语句是PHP+MySQL中常用的操作,判断update语句是否执行成功是其中非常重要的一个环节。本文就以实例展示了php+MySQL判断update语句是否执行成功的方法。分享给大家供大家参考之用。具体方法如下: 代码一: $...

Global site tag (gtag.js) - Google Analytics