2013-01-04 14 views

risposta

6

Sfortunatamente, il metodo quoteInto() è stato rimosso con l'introduzione del nuovo Zend\Db in ZF 2.0. E non esiste un equivalente che abbia esattamente lo stesso comportamento.

In ZF2 è presente il metodo quoteValue(). Questo metodo accetta un valore come parametro e quindi cita il valore in modo da poterlo inserire in modo sicuro in una query SQL come valore.

Tuttavia, è possibile utilizzare quoteValue() per replicare il comportamento del metodo ZF1 quoteInto(). Si potrebbe semplicemente prendere il codice del metodo quoteInto() da ZF1, e applicare il metodo quoteValue() dall'oggetto piattaforma ZF2 ad esso:

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

Ci sono alcune differenze. ZF1 ha un parametro $type, ma a causa del modo in cui ZF2 lavora con queste cose, il parametro type non ha molto senso. E c'è un parametro $platform, perché questo metodo ha una dipendenza dalla piattaforma per il metodo quoteValue().

-1

è ancora lì (un po '), controlla zf2/library/Zend/Db/Adapter/Platform /your DB adapter ho trovato circa 6 diversi quote() metodi disponibili nel MySql variant. Penso tuttavia che quoteValue() abbia sostituito il valore predefinito quoteInto() a cui siamo abituati.

[EDIT ]
Using the platform object fornirà una certa direzione, ma penso che la maggior parte del tempo le nuove classi SQL sarà solo utilizzare l'API di piattaforma per fare la citazione per noi. Lo sto ancora imparando da solo, quindi non sono sicuro di nulla.

+0

'quoteInto' richiede due parametri: la stringa e il valore sostituito ma' quoteValue' richiede solo 1 parametro. Come dovrei usarlo? –

3

La citazione di un'istruzione SQL è il vecchio e potenzialmente insicuro modo di farlo. È necessario utilizzare istruzioni preparate che offrono una protezione molto migliore contro l'iniezione SQL. Vorrei utilizzare uno dei driver PDO listed here (a seconda del database) e seguire alcuni degli esempi seguenti che utilizzano query preparate.