2013-01-04 7 views

Antwort

6

Leider wurde die quoteInto() Methode mit der Einführung der neuen Zend\Db in ZF 2.0 entfernt. Und es gibt kein Äquivalent, das genau dasselbe Verhalten hat.

In ZF2 gibt es die quoteValue() Methode. Diese Methode verwendet einen Wert als Parameter und gibt den Wert an, sodass Sie ihn als Wert in eine SQL-Abfrage einfügen können.

Sie könnten jedoch quoteValue() verwenden, um das Verhalten der ZF1 quoteInto() Methode zu replizieren. Sie könnten einfach den Code der quoteInto() Methode von ZF1, und wenden Sie die quoteValue() Methode von der Plattform Objekt in ZF2 es:

// modified quoteInto() function for ZF2 
function quoteInto($text, $value, $platform, $count = null) 
{ 
    if ($count === null) { 
     return str_replace('?', $platform->quoteValue($value), $text); 
    } else { 
     while ($count > 0) { 
      if (strpos($text, '?') !== false) { 
       $text = substr_replace($text, $platform->quoteValue($value), strpos($text, '?'), 1); 
      } 
      --$count; 
     } 
     return $text; 
    } 
} 

Es gibt einige Unterschiede. ZF1 hat einen $type Parameter, aber wegen der Art und Weise, wie ZF2 mit diesen Dingen arbeitet, macht der Typ Parameter wenig Sinn. Und es gibt einen $platform Parameter, weil diese Methode eine Abhängigkeit von der Plattform für die quoteValue() Methode hat.

-1

es ist immer noch da (irgendwie), check out zf2/library/Zend/Db/Adapter/Platform /your DB adapter Ich fand etwa 6 verschiedene quote() Methoden in der MySql variant. Ich denke jedoch, dass quoteValue() den Standard quoteInto() ersetzt hat, den wir alle gewohnt sind.

[EDIT]
Using the platform object wird eine Richtung zur Verfügung stellen, aber ich denke, dass die meiste Zeit die neuen SQL Klassen werden nur die Plattform api verwenden Sie die Angabe für uns zu tun. Ich lerne das immer noch selbst, also bin ich mir über nichts sicher.

+0

'quoteInto' nimmt zwei Parameter: die Zeichenfolge und der ersetzte Wert, aber' quoteValue' benötigt nur 1 Parameter. Wie soll ich es benutzen? –

3

Das Zitieren einer SQL-Anweisung ist der alte und möglicherweise unsichere Weg, dies zu tun. Sie sollten vorbereitete Anweisungen verwenden, die einen besseren Schutz vor SQL-Injection bieten. Ich würde einen der PDO-Treiber listed here (abhängig von Ihrer Datenbank) verwenden und den folgenden Beispielen folgen, die vorbereitete Abfragen verwenden.