我花了2个小时才选择一个陈述。
我做错了什么?
public function fetchSpecific($moderatorid = 1)
{
$resultSet = $this->getDbTable()->fetchAll("moderatorid = ".$moderatorid);
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_Network();
$entry->setId($row->id)
->setName($row->name)
->setModeratorId($row->moderatorid);
$entries[] = $entry;
}
return $entries;
}
这就是这一行:
$resultSet = $this->getDbTable()->fetchAll("moderatorid = ".$moderatorid);
它给我一个错误:
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
答案 0 :(得分:2)
从技术上讲,语法应该可行,但我建议稍微更改一下,以确保您的数据被正确转义。当您收到错误时,您对$moderatorid
看到了什么价值?我怀疑该变量由于某种原因产生了语法错误。
请改为尝试:
$results = $this->getDbTable()
->fetchAll($this->getDbTable()
->getAdapter()
->quoteInto('moderatorid = ?', $moderatorid));
这将确保$moderatorid
被正确转义,并有助于防止语法错误,更重要的是,它可以防止可能的SQL注入。
使用Zend_Db_Table::fetchAll()
的另一个问题是,当遇到这样的错误时,很难调试正在执行的查询。
要解决此问题,请自行构造SELECT
语句,以便在需要调试正在执行的实际SQL时回显该值。
$select =
$this->getDbTable()
->select()
->from($this->getDbTable()) // optionally you can specify cols as the 2nd param
->where('moderatorid = ?', $moderatorid);
echo $select; // e.g. SELECT `table`.* FROM `table` WHERE (moderatorid = 1)
$results = $this->getDbTable()->fetchAll($select);
希望能帮助您解决问题。
一些有用的参考文献:
Zend_Db_Select
Zend_Db_Table