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()方法无论如何都会进行任何消毒。