PDO パラメーターの使用法 (長さ制限またはバグ) について質問します。
次の php コードがあります:
$tids='588316104237364, 573473840208171, 585814107854381';
$sql = 'SELECT trade_id,t id,tra de_md5 ,receiver_md5, order_md5,status,llc_no,modified_time FROM ep_trade WHERE tid in ( '.$tids.' ) および biz_id=? 制限 10000'
$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 ( ?) および biz_id=? 10000';
$param[0]=$tids;
$stmt->execute($param);
常に最初の 1 行だけを返しますか?なぜ。
実行環境: php5.1 centos 5.7, mysql 5.1
ポイントがたくさんあります、少し$を払っても構いません、解決してください、ありがとう。
ディスカッション(解決策)への返信
1. プレースホルダー ? で値のセットを置き換えることはできません。
select * from table where id in(?);これは、セットの場合に発生した状況です。値の場合、最初の値だけが値として取られます。
select * from table order by ?;
数字記号を変数として使用しないでください。そうしないと、注入が防止されません。
ありがとうございます。私は 2 年間 PHP に取り組んできましたが、この問題は見つかりませんでした。