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

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

DDD
リリース: 2024-11-25 09:19:11
オリジナル
852 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート