请教关于PDO的参数(有长度限制,或者Bug)用法:

csdncb 2014-03-27 06:32:35
请教关于PDO的参数(有长度限制,或者Bug)用法:

有如下句php代码:
$tids='588316104237364, 573473840208171, 585814107854381';
$sql = 'SELECT trade_id,tid,trade_md5,receiver_md5,order_md5,status,llc_no,modified_time FROM ep_trade WHERE tid in ( '.$tids.' ) and biz_id=? limit 10000';
$param[0]=123;
$stmt->execute($param);
可以正确执行,并返回数据3行

但是换一个写法:
$sql = 'SELECT trade_id,tid,trade_md5,receiver_md5,order_md5,status,llc_no,modified_time FROM ep_trade WHERE tid in ( ? ) and biz_id=? limit 10000';
即将变量tid放到参数中:
$param[0]=$tids;
$param[1]=123;
$stmt->execute($param);

总是仅返回第一行?是为何呢。

执行环境:php5.1 centos 5.7, mysql 5.1

分数很多,付点$也行的,求解,谢谢。
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2014-03-28
  • 打赏
  • 举报
回复
貌似就這些了。 不要把佔位符當作一個變量,否則就不能防止注入。
csdncb 2014-03-28
  • 打赏
  • 举报
回复
to fdipzone 非常感谢,回复很清楚! 能否告诉个连接告诉这些从哪作搜索到的?我想进一步了解下,还有什么特别的规则。
xuzuning 2014-03-28
  • 打赏
  • 举报
回复
正解! 所以 tid in ( ? ) 可写作 find_in_set( tid, ? )
csdncb 2014-03-28
  • 打赏
  • 举报
回复
真心的感谢,真是山外有山啊,做了2年php居然没发现这个问题。
傲雪星枫 2014-03-27
  • 打赏
  • 举报
回复
不是PDO的bug,是PDO的规则如此。 使用PDO需要注意几种情况 1.不能让占位符 ? 代替一组值,如:

select * from table where id in(?);
就是你遇到的情况,当是一组值时,只会取第一个值。 2.不能让占位符代替数据表名或列名,如:

select * from table order by ?;
3.不能让占位符 ? 代替任何其他SQL语法,如:

select extract(? from addtime) as dt from table;

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧