2009-03-28 1 views
8

im делает некоторые запросы в Zend Framework, и мне нужно убедиться, что SQL-инъекция не возможна в следующих форматах. Я могу использовать mysql_escape (устарел) и не буду выполнять всю работу. Если я попытаюсь использовать real_mysql_escape, он не сможет захватить связь с базой данных, и я не могу найти, как zend_filter решит проблему.Php on zend, как избежать переменной для запроса?

им запрос делать (Simplied) имеет следующий sintaxes:

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

Что является лучшим способом для предотвращения SQL Injection с этой структурой?

ответ

17

Easy:

$db->quote($username); 

Итак:

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

Когда я использую $ db-> quote для строки, которую я вставляю, она помещает кавычки в строку даже в поле базы данных. Должен ли я обрезать его после того, как я его процитирую, или я использую его неправильно? – Gisheri

1

При работе с моделью, вы можете использовать:

$bugs = new Bugs(); 
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1)); 
Смежные вопросы