У меня есть функция для извлечения одной строки данных, представляющих отчет о продажах магазина на определенную дату.Я использую похожую методологию для извлечения данных из одного и того же класса и приложения и никогда не сталкивалась с этой проблемой.Моя функция (и 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?