請教關於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, ? )
to fdipzone 非常感謝,回複很清楚!
能否告訴個串連告訴這些從哪作搜尋到的?我想進一步瞭解下,還有什麼特別的規則。
貌似就?些了。
不要把?位符?作一??量,否?就不能防止注入。
真心的感謝,真是山外有山啊,做了2年php居然沒發現這個問題。