10

我在 Zend Framework 中做一些查询,我需要确保在下一种格式中没有 SQL 注入是可能的。我可以使用 mysql_escape(deprecated) 并且不会做所有的工作。如果我尝试使用 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 INJECTION 的最佳方法是什么?

4

3 回答 3

19

简单的:

$db->quote($username);

所以:

   $username = $db->quote($username . '%');
   $select = 'SELECT COUNT(*) AS num
                                FROM message m
                                WHERE m.message LIKE ' . $username;
   $row = $db->fetchRow($select);
于 2009-03-28T18:41:08.050 回答
14
$sql = 'SELECT * FROM messages WHERE username LIKE ?';
$row = $db->fetchRow($sql, $username);

参考: http: //framework.zend.com/manual/en/zend.db.html

于 2009-03-28T18:40:48.737 回答
1

使用模型时,您可以使用:

$bugs = new Bugs();
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
于 2013-06-12T10:36:21.337 回答