Zend framework Zend_Framework 1.12 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误

Zend framework Zend_Framework 1.12 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误,zend-framework,zend-db,zend-db-table,zend-db-select,Zend Framework,Zend Db,Zend Db Table,Zend Db Select,在此之前,我了解到有关此例外的多个问题。我已经看过了,但还没有找到我这个问题的答案。大多数问题都使用Zend_Db_表::getDefaultAdapter(),我不使用它。相反,我使用的是一个应用程序\u模型\u DbTable\u名称,我想知道是否可以这样做 而且,我确实有访问权限,因为这是我看到错误时检查的第一件事。数据库是本地的,我通过MySqlWorkBench使用相同的用户/密码访问它 我的目标是在两列满足控制器操作中设置的条件时删除一行,如下所示: public function

在此之前,我了解到有关此例外的多个问题。我已经看过了,但还没有找到我这个问题的答案。大多数问题都使用
Zend_Db_表::getDefaultAdapter(),我不使用它。相反,我使用的是一个
应用程序\u模型\u DbTable\u名称
,我想知道是否可以这样做

而且,我确实有访问权限,因为这是我看到错误时检查的第一件事。数据库是本地的,我通过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类(非常简单):

下面是出现的错误:

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
以下是引起我注意的内容和(id=7)),请参见附加括号?那是从哪里来的

下面是
var_dump($select->getPart(Zend_Db_select::WHERE))的结果

为了好玩,我尝试切换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
这又是第二个括号(unidad='galeria de Arte ULPGC')。我真的不知道这是否是问题所在(但我认为这是因为如果不是这样,我不知道什么可能是错的)


我试着只使用一个where条件(比如id),它删除得很好。我非常感谢你的帮助,谢谢

这里的问题是
getPart()
返回的内容与
delete()
期望的内容不匹配

正如您已经指出的,
var_dump($select->getPart(Zend_Db_select::WHERE))
还返回where语句中的逻辑运算符,但
delete()
运算符需要“field=>value”形式的数组或包含完整where子句的字符串

因此,解决问题的最简单(未经测试)方法是传递
$db->delete(内爆('''.$select->getPart(Zend_db_select::WHERE))
以便
delete()
接收一个完全限定的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