ホームページ >バックエンド開発 >PHPチュートリアル >Yiiフレームワークのパラメータ化されたクエリのINクエリが1つしかクエリできない問題を解決
Yii フレームワークのパラメータ化クエリで IN クエリが 1 つだけクエリできる問題を解決するにはどうすればよいですか? この記事では主に、Yii フレームワークのパラメータ化クエリで IN クエリが 1 つだけクエリできる問題の解決策を紹介します。 Yii フレームワークで IN クエリを分析するための理由と関連する関数、および FIND_IN_SET 関数の使用スキルを確認します。お役に立てれば幸いです。
詳細は次のとおりです:
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クエリが使用されていることがわかりました。その理由は次のとおりです。値のセットをプレースホルダーに置き換えることはできません。
SELECT id FROM tb WHERE userid IN ( ? );
理由が分かったので、簡単な普及科学
$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);
の下で
Array ( [0] => Array ( [id] => 1013 ) [1] => Array ( [id] => 1015 ) [2] => Array ( [id] => 1017 ) )
FIND_IN_SET(str,strlist)
FIND_IN_SET 関数を満たすことができる代替メソッドを見つけることができます。文字列 str が N 個のサブチェーンで構成される文字列リスト strlist にある場合、戻り値の範囲は 1 ~ N です。
文字列リストは、「,」記号で区切られたサブチェーンで構成される文字列です。最初の引数が定数文字列で、2 番目の引数が SET 型の列である場合、FIND_IN_SET() 関数はビット計算を使用するように最適化されます。
str が strlist にない場合、または strlist が空の文字列の場合、戻り値は 0 です。いずれかのパラメータが NULL の場合、戻り値は NULL になります。最初の引数にカンマ (',') が含まれている場合、この関数は正しく動作しません。
[追記] strlist内のカンマからなる文字列は通常通り使用できず、カンマの右側にスペースが入ると認識されません。
関連する推奨事項:
以上がYiiフレームワークのパラメータ化されたクエリのINクエリが1つしかクエリできない問題を解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。