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

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

WBOY
WBOYOriginal
2016-06-13 11:52:381481browse

请教关于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.不能让占位符 ? 代替一组值,如:

<br />select * from table where id in(?);<br />

就是你遇到的情况,当是一组值时,只会取第一个值。

2.不能让占位符代替数据表名或列名,如:
<br />select * from table order by ?;<br />


3.不能让占位符 ? 代替任何其他SQL语法,如:
<br />select extract(? from addtime) as dt from table;<br />


------解决方案--------------------
正解!
所以  tid in ( ? )  
可写作 find_in_set( tid, ? )  

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn