Ok, ich benutze Yii2
und ich bin vertraut mit der Vorbereitung / Bindung von Daten bei der Verwendung von MySQL Abfragen, wie zum Beispiel:
Aber was ist, wenn der Wert mehrere Werte enthalten darf, z. B. bei Verwendung der MySQL
Syntax IN
?
Zum Beispiel:
%Vor% Nun, ich verstehe, dass das obige nur funktionieren würde, wenn $parents
var nur eins -Wert hätte; Aber wenn es mehrere Werte wie 1,2,3
hätte, dann würden Sie etwas wie '1,2,3'
haben, wenn Sie wirklich '1','2','3'
OR 1,2,3
wollen.
Was ist der richtige Weg, dies zu tun?
Die DB-Funktionen von Yii2 basieren auf PDO
.
Gemäß dem Handbuch von bindValue
gibt es keine Unterstützung für den Wert von Array
type. (Dritter Parameter - data_type
).
Die Lösung besteht darin, vor der Abfrage eine Zeichenfolge zu erstellen, die zu Ihrer IN
-Klausel passt und sie als Zeichenfolge bindet.
Etwas wie:
%Vor%Bearbeiten
Es scheint, dass der Platzhalter, der durch das implodierte Array ersetzt wird, als ein Zeichenfolgenwert '1,2,3'
anstelle von '1','2','3'
verwendet wird (da es sich um einen einzelnen Platzhalter handelt).
Um dieses Problem zu lösen, schlage ich vor, die mehreren ?
Platzhalter zu verwenden.
Anstatt also IN (:parents)
zu haben, hätten Sie IN (?, ?, ?, ? ,....)
, und da wir bereits ein geordnetes Array haben, können wir count($array)
verwenden, um zu wissen, wie viele Platzhalter wir einfügen müssen.
Bitte beachten Sie den übergebenen Wert des ersten Parameters von bindValue;
Der Grund dafür ist $i+1
und nicht $i
, die im Handbuch erwähnt werden:
Für eine vorbereitete Anweisung, die Platzhalter für Fragezeichen verwendet, wird dies der Fall sein sei die 1-indizierte Position des Parameters.
Weitere Informationen und alternative Lösungen finden Sie in der folgenden Antwort: Ссылка