Mysql prepare statment in 的一个陷阱

使用prepare statment设置in表达式的参数,结果没有像预想的那样,既没有出错,也没有返回全部的值,而是只返回了逗号分隔的第一值的结果。不知道mysql为什么要这么设计,还不如直接报错了好。

mysql> prepare stmt1 from 'select id,name from user where id in (?)'; 
mysql> set @a = '4208064,7303964,7303967,7355999'; 
mysql> execute stmt1 using @a ; 
+---------+----------+ 
| id | name | 
+---------+----------+ 
| 4208064 | aaaaaaaa | 
+---------+----------+ 
1 row in set (0.00 sec) 
mysql> select id, name from user where id in (4208064,7303964,7303967,7355999); 
+---------+------------+ 
| id | name | 
+---------+------------+ 
| 4208064 | aaaaaaaa | 
| 7303964 | bbbbbbbb | 
| 7303967 | cccccc | 
| 7355999 | ddddddddd | 
+---------+------------+ 
4 rows in set (0.00 sec)

如果非要用, 只能这样: [sourcecode]

mysql> prepare stmt1 from 'select id,name from user where id in (?,?,?,?)'; 
mysql> set @a = '4208064'; 
mysql> set @b = '7303964'; 
mysql> set @c = '7303967'; 
mysql> set @d = '7355999'; 
mysql> execute stmt1 using @a, @b, @c, @d; 
+---------+------------+ 
| id | name | 
+---------+------------+ 
| 4208064 | aaaaaaaa | 
| 7303964 | bbbbbbbb | 
| 7303967 | cccccc | 
| 7355999 | ddddddddd | 
+---------+------------+ 
4 rows in set (0.00 sec) 

[/sourcecode] 所以,你要在程序中正确的生成"?,?,?,?",问好的个数和参数的个数对应。

转载于:https://my.oschina.net/komodo/blog/919189

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值