W Zend Framework 1 znajduje się metoda quoteinto dla adaptera bazy danych, która może być używana do zacytowania instrukcji sql.Jaki jest ekwiwalent ZF2 metody quoteInto() w ZF1?
Chciałbym poznać jego odpowiednik w Zend Framework 2?
W Zend Framework 1 znajduje się metoda quoteinto dla adaptera bazy danych, która może być używana do zacytowania instrukcji sql.Jaki jest ekwiwalent ZF2 metody quoteInto() w ZF1?
Chciałbym poznać jego odpowiednik w Zend Framework 2?
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()
.
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.
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ń.
'quoteInto' przyjmuje dwa parametry: ciąg i zastąpiona wartość, ale' quoteValue' przyjmuje tylko 1 parametr. Jak powinienem go użyć? –