Почему мои СОЕДИНЕНИЯ терпят неудачу? - PullRequest
0 голосов
/ 12 августа 2011

У меня есть функция для извлечения одной строки данных, представляющих отчет о продажах магазина на определенную дату.Я использую похожую методологию для извлечения данных из одного и того же класса и приложения и никогда не сталкивалась с этой проблемой.Моя функция (и fetch ()) возвращают false, а execute () возвращает true.

Когда я запускаю тот же запрос в TOAD из редактора SQL, я получаю строку данных обратно какожидается.

Почему fetch () не работает?Примечание: я также попробовал fetchAll (), который возвращает пустой набор.Я также пытался не использовать связанные параметры, но это тоже не работает.

Вот код:

    public function getFullReport($store_id, $date)
    {
        $pdo = $this->application->database()->PDO();
        $user_id = $this->application->session()->user_id();

        $query = <<<SQL
SELECT sales_reports.*,
       labor2.hours AS labor_am,
       labor3.hours AS labor_wa,
       labor4.hours AS labor_associate,
       labor5.hours AS labor_kitchen,
       labor6.hours AS labor_training
  FROM sales_reports
       JOIN labor_reports AS labor2
          ON     sales_reports.store_id = labor2.store_id
             AND sales_reports.date = labor2.date
             AND labor2.labor_type_id = 2
       JOIN labor_reports AS labor3
          ON     sales_reports.store_id = labor3.store_id
             AND sales_reports.date = labor3.date
             AND labor3.labor_type_id = 3
       JOIN labor_reports AS labor4
          ON     sales_reports.store_id = labor4.store_id
             AND sales_reports.date = labor4.date
             AND labor4.labor_type_id = 4
       JOIN labor_reports AS labor5
          ON     sales_reports.store_id = labor5.store_id
             AND sales_reports.date = labor5.date
             AND labor5.labor_type_id = 5
       JOIN labor_reports AS labor6
          ON     sales_reports.store_id = labor6.store_id
             AND sales_reports.date = labor6.date
             AND labor6.labor_type_id = 6
       JOIN user_store_permissions
          ON sales_reports.store_id = user_store_permissions.store_id
 WHERE     sales_reports.store_id = :store_id
       AND sales_reports.date = :date
       AND user_store_permissions.user_id = :user_id
 LIMIT 1
SQL;

        $statement = $pdo->prepare($query);
        $statement->bindParam(':store_id', $store_id);
        $statement->bindParam(':date', $date);
        $statement->bindParam(':user_id', $user_id);

        $statement->execute();

        return $statement->fetch(PDO::FETCH_ASSOC);
    }

ОБНОВЛЕНИЕ

Похоже, что трудовые объединения почему-то не работают.Когда я использую LEFT JOIN, он возвращает строку, в которой все трудовые значения равны нулю.Однако я не вижу этого результата в Toad for MySQL, который правильно выполняет и версию запроса LEFT JOIN, и JOIN и возвращает полную строку.

Итак, новый вопрос: почему мои JOIN неработает в моем коде PHP PDO, но они работают с одними и теми же данными с одинаковыми параметрами при запуске SQL в Toad?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Извините - я решил это довольно давно и забыл ответить на свой вопрос, как рекомендовал Relequestual.

Я считаю, что проблема заключалась в том, что я выполнял запросы Toad SQL на своем удаленном сервере MySQL, тогда какОператоры PHP PDO выполнялись на моем локальном сервере MySQL.Глупый, типичный хедштер, когда ты слишком долго смотришь на экран!

0 голосов
/ 25 ноября 2011

Похоже, это связано с оператором limit.У меня та же проблема с использованием PDO с очень простым соединением, как показано ниже.

select e.id,e.name,c.id2 
from espempdata e, espempclasses c 
where e.empClass=c.id2 limit 50

Сбой с оператором limit и без него.Запуск его из командной строки проходит.Weird.

...