Php на Zend, как экранировать переменную для запроса? - PullRequest
9 голосов
/ 28 марта 2009

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

Запрос, который я выполняю (упрощенно), имеет следующие синтаксисы:

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

Каков наилучший способ предотвращения SQL-инъекций с помощью этой платформы?

Ответы [ 3 ]

17 голосов
/ 28 марта 2009

Легко:

$db->quote($username);

Итак:

   $username = $db->quote($username . '%');
   $select = 'SELECT COUNT(*) AS num
                                FROM message m
                                WHERE m.message LIKE ' . $username;
   $row = $db->fetchRow($select);
14 голосов
/ 28 марта 2009
$sql = 'SELECT * FROM messages WHERE username LIKE ?';
$row = $db->fetchRow($sql, $username);

Ссылка : http://framework.zend.com/manual/en/zend.db.html

1 голос
/ 12 июня 2013

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

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