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

WBOY
發布: 2016-06-13 11:52:38
原創
1442 人瀏覽過

请教关于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, ? )  

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!