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

问题描述 投票:0回答:2
[在此之前,我不知道有关于此例外的多个问题。我已经浏览了它们,但没有找到针对我特定问题的答案。大多数问题使用Zend_Db_Table::getDefaultAdapter();,而我没有使用。相反,我使用的是Application_Model_DbTable_Name,但想知道是否可以这样做。

而且,我确实可以访问,因为这是我看到错误时首先检查的内容。该数据库是本地的,我通过My​​SqlWorkBench用相同的用户/密码访问它。

我的目标是在两列满足控制器操作中设置的条件时删除

一行

,如下所示: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),并将其删除就好了。非常感谢您的帮助,谢谢!

[在此之前,我不知道所问的有关此例外的多个问题。我已经浏览了它们,但没有找到针对我特定问题的答案。大多数问题使用...

这里的问题是,getPart()返回的值与delete()期望的值不匹配。

正如您已经指出的那样,var_dump($select->getPart(Zend_Db_Select::WHERE));还会在where语句中返回逻辑运算符,但是delete()运算符要么期望使用“ field => value”形式的数组,要么期望包含完整where子句的字符串。 >

因此,解决问题的最简单(未经测试)的方法是传递$db->delete(implode(' ', $select->getPart(Zend_Db_Select::WHERE)));,以便delete()接收完全合格的where子句作为字符串而不是它无法处理的数组。

没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案
zend-framework zend-db zend-db-table zend-db-select
2个回答
0
投票
这里的问题是,getPart()返回的值与delete()期望的值不匹配。

-2
投票
没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案,没有答案
© www.soinside.com 2019 - 2024. All rights reserved.