Wie bind-array-Parameter in Yii-framework?
Habe ich folgenden code:
$inputs = "1,2,3,4,5";
$sql = "SELECT * FROM obj WHERE id IN(:input)";
$commond = Yii::app()->db->createCommand($sql);
$commond->bindValue(":input", $inputs , PDO::PARAM_STR);
Aber das Abfrage-Ergebnis ist falsch. Wie bind-params für solche IN
Zustand?
- Uday Sawant Antwort ist ein guter workaround. Dein code oben wird tatsächlich dazu führen, in dieser SQL-Anweisung:
SELECT * FROM obj WHERE id IN ('1,2,3,4,5')
. Beachten Sie, dass der Wert von$inputs
ist ein einzelsaite. Das macht die Ergebnisse falsch. Wenn Sie wirklich müssen nutzenbindValue
haben, müssen Sie zum erstellen der SQL-arrays wie z.B. dieses hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie es so
I ll versuchen, wieder mit
$command->bindValue()
Methode.Gekommen, über dieses problem ein paar mal in meine Projekte, die ich haben kommen mit die folgenden Yii zu arbeiten, um mit CDbCriteria das ist etwas hacky, aber gibt das die Sicherheit, von param count passenden.
Wenn angewendet auf dein Beispiel mein code wäre:
UPDATE
Es ist eigentlich eine viel sauberere Weg, dies zu tun gebaut in Yii:
Sehen Docs
Mit Yii ' s Methode der Verkettung im CDbCommand um Ihre Abfrage zu erstellen (wie in Uday Sawant Antwort) ist in der Regel eine gute Wahl. Wenn Sie zum erstellen der Abfrage Stückwerk ist nicht ideal, ein gute alternative ist es, reduzieren Sie Ihre array von Parametern, so dass Sie nicht umgehen SQL-injection-Schutz, etwa so:
In diesem Beispiel, die endgültige sql und Argumente sind:
In Projekte, bei denen der Einsatz von roh-SQL ist der bevorzugte standard, der größte Vorteil ist, Sie können dieses bundle als utility-Funktion und verwenden es für jede Abfrage. Es ist eine Schande, Yii nicht automatisch erweitern-array Argumente in dieser Weise, aber Sie können auch hinzufügen, diese Unterstützung selbst Projekte, die direkt mit PDO.
Gibt es zwei Methoden, die in Yii:
bindValue()
verwendet in der genannten FragebindValues($paramsArray)
verlangen ich.e$paramsArray = array(':index'=>$value)
Verwende ich folgenden code, der funktioniert für mich perfekt: