この記事では、Yii フレームワークのパラメータ化クエリで IN クエリが 1 つしかクエリできない問題の解決策を主に紹介し、Yii フレームワークで IN クエリが 1 つだけクエリできる理由を例と関連関数の形式で分析します。 FIND_IN_SET 関数の使用スキルと必須の友人はそれを参照してください
この記事の例では、Yii フレームワークのパラメータ化されたクエリで 1 つの IN クエリしかクエリできない問題の解決策について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
yiiフレームワークでINクエリのパラメータ化を使用すると、結果が期待どおりになりません
$sql =<<<SQL SELECT id FROM tb WHERE id IN(:ids) SQL; $db = GeneralService::getSlaveDB(); $result = $db->createCommand($sql)->query([':ids' => '1013,1015,1017'])->readAll(); print_r($result);
Array ( [0] => Array ( [id] => 1013 ) )
そこで、関連するソースコードを確認しましたyii フレームワークでそれが PDO クエリであることがわかったので、PDO 関連情報をクエリしてその理由を見つけました: 一連の値をプレースホルダーに置き換えることはできません。
SELECT id FROM tb WHERE userid IN ( ? );
理由が分かったので、次は、単純な一般科学に基づいてニーズを満たすことができる FIND_IN_SET 関数を見つけます
$sql =<<<SQL SELECT id FROM tb WHERE FIND_IN_SET(id, :ids) SQL; $db = GeneralService::getSlaveDB(); $result = $db->createCommand($sql)->query([':ids' => '1013,1015,1017'])->readAll(); print_r($result);
。文字列str は N にあります。 サブチェーンで構成される文字列リスト strlist では、戻り値の範囲は 1 から N です。
[追記] strlist内のカンマからなる文字列は通常通り使用できず、カンマの右側にスペースが入ると認識されません。
以上がYii クエリの IN クエリは 1 つのメソッドのみをクエリできますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。