質問:
次を使用してパラメータを WHERE IN 句にバインドしようとするとPDO、パラメータ化せずに値を手動で挿入する場合とは異なり、結果のカウントは常に 1 です。この不一致の原因は何ですか?
コード:
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount();
答え:
残念ながら、PHP データ オブジェクト(PDO) は、IN 句のパラメータを直接バインドすることをサポートしていません。 $myArray 配列は、次の SQL と同様に単一の文字列として扱われます:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
複数のカンマ区切り値が存在するにもかかわらず、データベースはそれらを 1 つの文字列値として解釈します。
望ましい動作を実現するには、次のように IN 句を手動でクエリに挿入する必要があります:
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
残念ながら、現時点では、PDO の IN 句のパラメータ バインディングに代替のメカニズムはありません。
以上がWHERE IN 句にパラメータをバインドするときに PDO が 1 行だけを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。