2009-03-28 15 views
8

Sto facendo alcune domande in Zend Framework e ho bisogno di assicurarmi che nessuna iniezione SQL sia possibile nei prossimi tipi di formati. Posso usare mysql_escape (deprecato) e non farò tutto il lavoro. Se provo a usare real_mysql_escape non riuscirò ad accedere alla connessione con il database e non trovo come zend_filter possa risolvere il problema.Php su zend, come evitare una variabile per una query?

La query sto facendo (Simplied) hanno i seguenti sintaxes:

$db = Zend_Registry::get('db'); 
    $select = "SELECT COUNT(*) AS num 
       FROM message m 
       WHERE m.message LIKE '".$username." %'"; 
    $row = $db->fetchRow($select); 

Qual è il modo migliore per prevenire SQL Injection con questo quadro?

risposta

17

Facile:

$db->quote($username); 

Quindi:

$username = $db->quote($username . '%'); 
    $select = 'SELECT COUNT(*) AS num 
           FROM message m 
           WHERE m.message LIKE ' . $username; 
    $row = $db->fetchRow($select); 
+0

quando uso $ db-> quote su una stringa che sto inserendo, inserisce virgolette nella stringa anche nel campo del database. Devo ritagliarlo dopo averlo citato, o lo sto usando in modo errato? – Gisheri

1

Quando si lavora con un modello è possibile utilizzare:

$bugs = new Bugs(); 
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1)); 
Problemi correlati