跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

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

请教关于PDO的参数(有长度限制,或者Bug)用法: 请教关于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 分数很多,付点$也行的,求解,谢谢。 ------解决方案-------------------- 不是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;
------解决方案-------------------- 正解! 所以  tid in ( ? ) 可写作 find_in_set( tid, ? )

相关文章