Heim  >  Artikel  >  Backend-Entwicklung  >  IN-Abfragen in Yii-Abfragen können nur eine Methode abfragen

IN-Abfragen in Yii-Abfragen können nur eine Methode abfragen

巴扎黑
巴扎黑Original
2017-08-13 14:32:582761Durchsuche

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. Er analysiert den Grund, warum im Yii-Framework nur eine IN-Abfrage abgefragt werden kann, sowie die damit verbundenen Funktionen und Verwendungsfähigkeiten Freunde in Not können sich auf die Funktion FIND_IN_SET beziehen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

Bei Verwendung der Parametrisierung für IN-Abfragen im yii-Framework ist 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);


Also habe ich den relevanten Quellcode im yii-Framework durchgesehen und festgestellt, dass eine PDO-Abfrage verwendet wurde, also habe ich die PDO-bezogenen Informationen abgefragt und den Grund herausgefunden:
Array
(
  [0] => Array
    (
      [id] => 1013
    )
)

kann nicht zulassen, dass das Platzbelegungssymbol eine Reihe von Werten ersetzt .


Da Sie nun den Grund kennen, finden Sie eine alternative Methode. FIND_IN_SET kann genau die Anforderungen erfüllen
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);


FIND_IN_SET-Funktion unter einfacher Populärwissenschaft
Array
(
  [0] => Array
    (
      [id] => 1013
    )
  [1] => Array
    (
      [id] => 1015
    )
  [2] => Array
    (
      [id] => 1017
    )
)


Wenn die Zeichenfolge str in einer Zeichenfolge enthalten ist, die aus besteht N Unterketten In der Liste strlist liegt der Rückgabewert zwischen 1 und N.
FIND_IN_SET(str,strlist)

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.

Das obige ist der detaillierte Inhalt vonIN-Abfragen in Yii-Abfragen können nur eine Methode abfragen. 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