我正在开发一个允许用户输入mySQL中VARCHAR(255)字段的应用程序,因此安全性是一个主要问题。
我无法理解quote()。如果我使用quote('test'),数据在SELECT上返回'\'test \'',这是不可取的。如何取消引用此数据?
如果我绕过quote(),我可以查看phpmyadmin并看到'test',所以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()吗?
答案 0 :(得分:5)
不,Zend为你做到了。
如果我绕过quote(),我可以查看phpmyadmin并看到'test',所以Zend似乎并没有自动引用我...
呵呵,如果你在PMA中看到'test'(带引号),那就意味着Zend成功引用了你的字符串。如果Zend没有引用()它 - 你会看到关于错误查询的例外。 ; - )
答案 1 :(得分:0)
Zend_Db_Table_Abstract :: insert使用Zend_Db_Adapter_Abstract :: insert来执行插入。 Zend_Db使用prepared statement,因此使用insert方法时不存在SQL注入的风险。在将值传递给insert之前,您不必引用它们。