2013-01-04 9 views

Odpowiedz

6

Niestety, metoda quoteInto() została usunięta wraz z wprowadzeniem nowego Zend\Db w ZF 2.0. I nie ma odpowiednika, który ma dokładnie to samo zachowanie.

W ZF2 znajduje się metoda quoteValue(). Ta metoda przyjmuje jedną wartość jako parametr, a następnie podaje wartość, dzięki czemu można bezpiecznie umieścić ją w zapytaniu SQL jako wartość.

Można jednak użyć polecenia quoteValue(), aby powielić zachowanie metody ZF1 quoteInto(). można po prostu wziąć kod metody quoteInto() od ZF1 i zastosować metodę z obiektu platformy w ZF2 quoteValue() do niego:

// 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; 
    } 
} 

Istnieją pewne różnice. ZF1 ma parametr $type, ale ze względu na sposób działania ZF2 z tymi rzeczami, parametr typu nie ma większego sensu. I istnieje parametr $platform, ponieważ ta metoda ma zależność od platformy dla metody quoteValue().

-1

to wciąż tam (rodzaj), sprawdź zf2/library/Zend/Db/Adapter/Platform /your DB adapter Znalazłem około 6 różnych quote() metod dostępnych w MySql variant. Myślę jednak, że quoteValue() zastąpił domyślny quoteInto(), do którego wszyscy jesteśmy przyzwyczajeni.

[EDIT]
Using the platform object dostarczy jakiś kierunek, ale myślę, że większość czasu nowe SQL Zajęcia będą po prostu korzystać z API platformy wykonać podając się za nami. Wciąż się o tym dowiem, więc nie jestem do końca przekonany o niczym.

+0

'quoteInto' przyjmuje dwa parametry: ciąg i zastąpiona wartość, ale' quoteValue' przyjmuje tylko 1 parametr. Jak powinienem go użyć? –

3

Cytowanie instrukcji SQL to stara i potencjalnie niepewna metoda. Powinieneś używać przygotowanych instrukcji, które mają znacznie lepszą ochronę przed iniekcją SQL. Chciałbym użyć jednego z sterowników PDO listed here (w zależności od twojej bazy danych) i postępować zgodnie z przykładami poniżej, które używają przygotowanych zapytań.