2011-02-08 5 views
2

мне было интересно, если что-то вроде этого, безопасен в Зенд: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() делает любую санитацию в любом случае.

Смежные вопросы