2010-10-13 45 views
3

我正在開發一個允許用戶在mySQL中輸入VARCHAR(255)字段的應用程序,因此安全性是一個主要問題。Zend - 插入/更新時是否需要使用quote()?

我無法理解quote()。如果我使用quote('test'),那麼數據在SELECT上返回'\'test \'',這是不可取的。我如何取消引用這些數據?

如果我繞過引號(),我可以窺視的phpmyadmin看到「測試」,所以它似乎並不認爲Zend的自動轉義引號我...

我的代碼看起來是這樣的:

 
    public function getDbTable() { 
     if (null === $this->_dbTable) { 
      $this->setDbTable(new Zend_Db_Table($this->_tableName)); 
     } 
     return $this->_dbTable; 
    } 

    private function insert($anObject) { 
     $row['cell1'] = $anObject->getCell1(); 
     $row['cell2'] = $anObject->getCell2(); 

     $this->getDbTable()->insert($row); 
    } 

在插入和更新時,我應該在$ anObject-> getCell1()等周圍使用quote()嗎?

回答

5

不,Zend會爲你做。

如果我繞過引號(),我可以窺視的phpmyadmin看到「測試」,所以它似乎並不認爲Zend的自動報價爲我...

呵呵,如果你看到'測試'(帶引號),這意味着Zend已經成功引用了你的字符串。如果Zend沒有引用()它 - 你會看到關於錯誤查詢的懷疑。 ;-)

+0

所以如果我使用Zend_Db_Table,默認情況下是否有足夠的保護? – Erik 2010-10-14 03:05:58

+0

當然。 'http:// framework.zend.com/svn/framework/standard/tags/release-1.10.8/library/Zend/Db/Adapter/Abstract.php'查看'public function insert' – zerkms 2010-10-14 03:25:42

0

Zend_Db_Table_Abstract :: insert使用Zend_Db_Adapter_Abstract :: insert來執行插入。 Zend_Db使用prepared statement,因此使用insert方法時不存在SQL注入的風險。在通過插入之前,您不必引用您的值。

相關問題