MySQL Zend Framework - SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 - PullRequest
1 голос
/ 05 февраля 2010

Я прочитал каждый ответ, который мог оштрафовать на SO, перед тем как опубликовать этот вопрос. Хотя они и не были похожими, ни одна из них не решала мою конкретную проблему (или я их не узнал).

У меня есть класс таблицы, который расширяет Zend_Db_Table_Abstract. В модели я пытаюсь вернуть одну строку, используя метод join () и основываясь на идентификаторе таблицы, например:

        $getCategoryResults = $this->select();
        $getCategoryResults->setIntegrityCheck(false)
                           ->from(array('c'=> 'categories', '*'))
                           ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array())
                            ->where("e.idEvent = ?", $idEvent);

когда я повторяю объект sql, я получаю это:

SELECT `c`.* FROM `categories` AS `c` 
INNER JOIN `events` AS `e` ON c.events_idEvent = e.idEvent 
WHERE (e.idEvent = '1')

Как ни странно, если я использую этот формат,

->where("e.idEvent = $idEvent");

мой вывод "ГДЕ (e.idEvent = 1)". Значение не заключено в тики, но, похоже, работает для MySQL. Когда я запускаю запрос в phpMyAdmin, я получаю это:

idCategory Тип displayOrder описание localStartTime events_idEvent
1 человек 1 5k Run / Walk 2010-02-18 23:59:59 1
2 команды 2 5k Категория команды 2010-02-18 23: 59: 591 1

что я и ожидал увидеть. Но когда я запускаю свое приложение в браузере, я получаю это уродство:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'SELECT c. * FROM categories AS c INNER JOIN events AS e ON c.events_id' в строке 1

Я проверил каждый ресурс, который могу придумать. Надеемся, что объединенная удивительность SO uber-экспертов сделает эту мою последнюю остановку. : D

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

По неизвестным мне причинам приложение полагало, что моя переменная $ pageResult не была установлена. Я обнаружил это после добавления isset () к коду:

        try {
        $getCategoryResults = $this->select();
        $getCategoryResults->setIntegrityCheck(false)
                           ->from(array('c'=> 'categories', '*'))
                           ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array())
                            ->where("e.idEvent = ?", $idEvent);

          if (isset($pageResult)) {
            $pageResult .= $getCategoryResults;
          }
          else {
            $pageResult = $getCategoryResults;
          }

    } catch (Exception $e) {
        echo ( "Could not find matching categories for event id = $idEvent");
    }

Проблема ушла, что, конечно, выявило следующую проблему, скрывающуюся за ней. : D

1 голос
/ 05 февраля 2010

Ознакомьтесь со второй частью заявления об ошибке. Скорее всего, это касается нарушения прав доступа, если MySQL в другом месте.

...