Zend安全的SQL查询?

问题描述:

我在想,如果这样的事情,是在Zend的安全:Zend安全的SQL查询?

$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); 

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

如果你不想使用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

Zend不能逃避你的变量,因为它从来没有看到它。你的变量被追加到一个字符串中,并且$ db-> query方法可以看到整个字符串。

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