我想知道这样的事情在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);
但我不喜欢这种工作方式,只是编写查询对我来说要快得多。我应该手动转义还是这样做?最简单的方法是什么?
答案 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()方法无论如何都不会进行任何清理。