Zend安全的SQL查询?

时间:2011-02-08 17:28:47

标签: php sql zend-framework escaping

我想知道这样的事情在Zend中是否安全:

$db = Zend_Registry::get('db');
$query = "SELECT * FROM tags t JOIN posts_tags pt ON pt.tag_id = t.tag_id where pt.post_id = " . $postid;
$select = $db->query();

我没有检查$postid的内容是否在这里。

Zend会在您进行以下查询时自动执行此操作:

$db = Zend_Registry::get('db');
$select = $db->select();
$select->from(array('p' => 'posts'))
    ->join(array('u' => 'users'), 'u.user_id = p.post_userid')
    ->where('p.post_id = ?', $postid);

但我不喜欢这种工作方式,只是编写查询对我来说要快得多。我应该手动转义还是这样做?最简单的方法是什么?

2 个答案:

答案 0 :(得分:3)

如果你不想使用Zend_Db_Select,你可以这样做:

$select = $db->query("SELECT * FROM tags t JOIN posts_tags pt ON pt.tag_id = t.tag_id where pt.post_id = ?", array($postid));

第二个参数是要放入占位符的值数组。请参阅:http://framework.zend.com/manual/en/zend.db.statement.html

答案 1 :(得分:1)

Zend无法转义你的变量,因为它永远不会看到它。您的变量将附加到字符串,$ db->查询方法可以查看整个字符串。

我认为query()方法无论如何都不会进行任何清理。