ホームページ >バックエンド開発 >PHPチュートリアル >Yiiフレームワークのパラメータ化されたクエリのINクエリが1つしかクエリできない問題を解決

Yiiフレームワークのパラメータ化されたクエリのINクエリが1つしかクエリできない問題を解決

*文
*文オリジナル
2018-01-03 13:19:351895ブラウズ

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([&#39;:ids&#39; => &#39;1013,1015,1017&#39;])->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([&#39;:ids&#39; => &#39;1013,1015,1017&#39;])->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内のカンマからなる文字列は通常通り使用できず、カンマの右側にスペースが入ると認識されません。

関連する推奨事項:

yii2のRestful API認証検証の詳細な説明

Yii2がカスタム独立バリデータを実装する方法の詳細な説明

Yii2統合 Xunsou実装 効率的な中国語単語分割検索

以上がYiiフレームワークのパラメータ化されたクエリのINクエリが1つしかクエリできない問題を解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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