Heim  >  Artikel  >  Backend-Entwicklung  >  Lösen Sie das Problem, dass IN-Abfragen im Yii-Framework nur eine parametrisierte Abfrage abfragen können

Lösen Sie das Problem, dass IN-Abfragen im Yii-Framework nur eine parametrisierte Abfrage abfragen können

*文
*文Original
2018-01-03 13:19:351836Durchsuche

Wie kann das Problem gelöst werden, dass in der parametrisierten Abfrage des Yii-Frameworks nur eine IN-Abfrage abgefragt werden kann? In diesem Artikel wird hauptsächlich die Lösung des Problems vorgestellt, dass in der parametrisierten Abfrage des Yii-Frameworks nur eine IN-Abfrage abgefragt werden kann IN-Abfrage im Yii-Framework in Form von Beispielen. Der Grund, warum Sie nur eine Funktion und die zugehörigen Funktionen und Verwendungsfähigkeiten der FIND_IN_SET-Funktion überprüfen können, kann von Freunden, die sie benötigen, nachgelesen werden. Ich hoffe, es hilft allen.

Die Details sind wie folgt:

Bei der Verwendung der Parametrisierung für die IN-Abfrage im yii-Framework war das Ergebnis nicht wie erwartet

$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
    )
)

Also habe ich mich umgedreht über die relevanten Informationen im yii-Framework Aus dem Quellcode habe ich herausgefunden, dass eine PDO-Abfrage verwendet wurde, also habe ich PDO-bezogene Informationen abgefragt und den Grund herausgefunden: kann einen Wertesatz nicht ersetzen mit Platzhaltern.

SELECT id FROM tb WHERE userid IN ( ? );

Da Sie nun den Grund kennen, wollen wir eine alternative Methode finden, die genau die Anforderungen erfüllt.

$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
    )
)

Eine einfache populäre Wissenschaft der FIND_IN_SET-Funktion

FIND_IN_SET(str,strlist)

Wenn sich die Zeichenfolge str in der Zeichenfolgenliste strlist befindet, die aus N Unterketten besteht, liegt der Rückgabewert zwischen 1 und N.

Eine String-Liste ist ein String, der aus durch „,“-Symbole getrennten Unterketten besteht. Wenn das erste Argument eine konstante Zeichenfolge und das zweite eine Spalte vom Typ SET ist, ist die Funktion FIND_IN_SET() für die Verwendung von Bitberechnungen optimiert.

Wenn str nicht in strlist enthalten ist oder strlist ein leerer String ist, ist der Rückgabewert 0. Wenn ein Parameter NULL ist, ist der Rückgabewert NULL. Diese Funktion funktioniert nicht ordnungsgemäß, wenn das erste Argument ein Komma (',') enthält.

[ps] Die aus Kommas bestehende Zeichenfolge in strlist kann nicht wie üblich durch das Einfügen eines Leerzeichens rechts vom Komma erkannt werden.

Verwandte Empfehlungen:

Detaillierte Erläuterung der restful API-Autorisierungsüberprüfung von yii2

Detaillierte Erklärung, wie Yii2 einen benutzerdefinierten unabhängigen Validator implementiert

Yii2 integriert Xunsou, um einen effizienten Abruf der chinesischen Wortsegmentierung zu erreichen

Das obige ist der detaillierte Inhalt vonLösen Sie das Problem, dass IN-Abfragen im Yii-Framework nur eine parametrisierte Abfrage abfragen können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn