Прежде всего я знаю о нескольких вопросах, заданных в отношении этого исключения. Я просмотрел их, но не нашел ответа по моей конкретной проблеме. Большинство вопросов используют Zend_Db_Table::getDefaultAdapter();
, и я не использую это. Вместо этого я использую Application_Model_DbTable_Name
, и мне осталось интересно, возможно ли это сделать.Zend_Framework 1.12 SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL
Кроме того, у меня есть доступ, так как это первое, что я проверил, когда увидел ошибку. База данных является локальной, и я получаю доступ к ней с тем же пользователем/паролем через 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
Вот что вызывает мое внимание И (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)" }
Просто для удовольствия, я попытался переключая порядок п где:
$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 = 'Galería de Arte ULP GC ') ) эта вторая скобка. Я действительно не знаю, если это проблема (но я полагаю, что это потому, что иначе я не знаю, что может быть ошибочно).
Я пробовал просто использовать одно условие (например, id), и он просто удалился. Я очень ценю вашу помощь, спасибо!