2011-02-08 79 views
2

我在想,如果這樣的事情,是在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); 

但我不喜歡這種工作方式,只是寫的查詢對我來說要快得多。所以我應該手動轉義還是爲我完成?什麼是最簡單的方法來做到這一點?

回答

4

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

2

Zend不能逃避你的變量,因爲它從來沒有看到它。你的變量被追加到一個字符串中,並且$ db-> query方法可以看到整個字符串。

我不認爲query()方法無論如何都會進行任何消毒。