prepare 预编译SQL:Mysql
2015-09-20 18:02
489 查看
[MYSQL]prepare 预编译SQL:Mysql
分类: Php&MySql2010-03-2823:03 1280人阅读 评论(0) 收藏 举报
sqlmysqlinsertdelete数据库table
预编译SQL:
SQL代码
prepare pstmt from 'select a from table';
上面这句SQL创建了一个预编译的SQL。名为pstmt,这个预编译SQL的存活期就是当前的会话,也就是当前的数据库连接。
如果连接一断开 ,那就会消失。
from后面跟的就是要进行编译的那个SQL,这个值可以是一个字面的字符串值 ,就像上面,也可以是一个变量。
比如:
SQL代码
set @sql = 'select * from admin';prepare pstmt from @sql;
from后面跟的只能是字面值或者变量这两种情况 ,不能直接跟十六进制的字符串。
比如:
SQL代码
prepare testhex from 0x73656C656374202A2066726F6D2061;
这样是错误 的,可以先用变量来接收这个十六进制串的值,然后再进行SQL的编译。
SQL代码
set @sql = 0x73656C656374202A2066726F6D2061;prepare testhex from @sql;
这样就正确了。
注意:被编译的SQL只能是一条单独的语句,不能多条语句一起编译,比如:
SQL代码
prepare mutisql from 'select 1;select 2';
这是错误的。
可以被预编译的SQL语句的类型也是有限制的,并不是所有的SQL都可以被编译。
下面这些类型的SQL是可以编译的:
create table,delete,do,insert,replace,select,set,update 和多数的show语句。
利用下面的SQL来执行上面的已经编译好的SQL:
execute pstmt; execute后面直接跟名字就可以执行。。
带参数的预编译SQL:
SQL代码
prepare pstmt from 'select a from table where id = ?';
参数用?代替。注意,就算参数的值是一个字符串,也不用加引号。加了反而有错。
在调用的时候利用using关键字向SQL传递参数 。
SQL代码
set @value = 1;execute pstmt using @value;
先声明一个变量来保存参数的值,然后通过后面的using @value来传SQL传递参数 。
注意这里的参数的值只能由变量来传递,不能直接写成execute pstmt using 1;
这是错误的。
多个参数之间用逗号隔开。
删除预编译SQL的办法:
SQL代码
drop prepare a;
a 是预编译SQL的名字。
相关文章推荐
- mysql-5.6.16-winx64 配置详解
- mysql字段插入中文乱码
- servlet+mysql实现简单报表显示
- 一个excel导入多个mysql表
- MySQL绿色版的安装(mysql-5.6.22-win32/winx64.zip)
- MySQL修改root密码的方法
- MYSQL数据库学习----插入、更新、删除
- MySQL中用户名定义上的细节可能导致的错误
- MYSQL数据库学习----查询
- MYSQL数据丢失讨论
- MySQL知识总结(二)
- 为什么我的mysql数据库里的表只有frm文件
- [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
- 15个实用的管理mysql的mysqladmin命令
- MySQL数据库
- mysql join中,on和where的区别
- 实现秒杀的几个想法(续)
- 深入浅出:MySQL的左连接、右连接、等值连接
- 在启动mysql的时候出现如下问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”
- 使用LVM快照实现对mysql数据库的备份