在任何事情之前,我都知道有关此异常的多个问题。我已经查看了它们,但没有找到解决我的特定问题的答案。大多数问题都使用Zend_Db_Table::getDefaultAdapter();
,而我没有使用它。相反,我正在使用一个Application_Model_DbTable_Name
并且我想知道是否可以这样做。
另外,我确实可以访问,因为这是我看到错误时检查的第一件事。该数据库是本地的,我通过 MySqlWorkBench 使用相同的用户/密码访问它。
我的目标是在两列满足控制器操作中设置的条件时删除一行,如下所示:
public function deleteAction(){
$request = $this->getRequest();
$this->_validateDigit($request->getParam('id'));
// _validateDigit(..) checks that the variable is numeric and if it´s not it redirects to
// an error page
$db = new Application_Model_DbTable_BecasPerfiles();
$select = $db->select();
$select->where('unidad=?', $this->_getUnit())
->where('id=?', (int) $request->getParam('id'));
$db->delete($select->getPart(Zend_Db_Select::WHERE));
$this->_redirect('/profile/view-profiles/unit/'.$this->_getUnit());
}
private function _getUnit()
{
return Zend_Registry::getInstance()['session']->unit;
//unit is nothing but a string
}
这是我的 DbTable 类(非常简单):
class Application_Model_DbTable_BecasPerfiles extends Zend_Db_Table_Abstract
{
protected $_name = 'becas_perfiles';
}
这是吐出的错误:
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 'AND (id=7))' at line 1
这是引起我注意的地方AND (id=7)),看到额外的括号了吗?那是从哪里来的?
这是结果var_dump($select->getPart(Zend_Db_Select::WHERE));
array(2) { [0]=> string(33) "(unidad='Galería de Arte ULPGC')" [1]=> string(10) "AND (id=7)" }
只是为了好玩,我尝试切换 where 子句的顺序:
$select->where('id=?', (int) $request->getParam('id'))
->where('unidad=?', $this->_getUnit());
这是输出:
Message: SQLSTATE[42000]: ...
syntax to use near 'AND (unidad='Galería de Arte ULPGC'))' at line 1
又是第二个括号AND (unidad='Galeríade Arte ULPGC' )。我真的不知道这是否是问题(但我认为这是因为否则我不知道可能出现什么问题)。
我尝试只使用一个 where 条件(如 id),它删除得很好。非常感谢您的帮助,谢谢!