ホームページ  >  記事  >  データベース  >  WHERE IN 句にパラメータをバインドするときに PDO が 1 行だけを返すのはなぜですか?

WHERE IN 句にパラメータをバインドするときに PDO が 1 行だけを返すのはなぜですか?

DDD
DDDオリジナル
2024-11-25 09:19:11781ブラウズ

Why Does PDO Return Only One Row When Binding Parameters to a WHERE IN Clause?

PDO を使用した WHERE IN 句パラメータのバインド

質問:

次を使用してパラメータを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。