Я получаю два разных типа ошибок из одной строки, и мне потребовалось много времени, чтобы выяснить, где была ошибка. Это интересное поведение, которое php демонстрирует при конкатенации MySql операторов запроса с использованием клавиш для разделения строк.
$query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at
FROM'.$this->table. ' p
LEFT JOIN categories c ON p.category_id=c.id
ORDER BY p.created_at DESC';
Примечание: между FROM и обратным апострофом нет пробела. Следующая ошибка:
Неустранимая ошибка : Uncaught PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с 'p LEFT JOIN Categories c ON p.category_id = c .id ORDER BY p.crea' в строке 2 в C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post. php: 31 Трассировка стека:
# 0 C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post. php (31): PDOStatement-> execute ( )
# 1 C: \ xampp \ htdocs \ php_REST_myblog \ api \ posts \ read. php (18): Post-> read ()
# 2 {main} добавлено C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post. php в строке 31
Следующий вариант -
$query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at
FROM '.$this->table. 'p
LEFT JOIN categories c ON p.category_id=c.id
ORDER BY p.created_at DESC';
Обратите внимание на отсутствие пробела между обратной кавычкой и p. Имя БД - myblog, имя таблицы - сообщения. Ошибка:
Неустранимая ошибка : Неперехваченное исключение PDOException: SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица 'myblog.postsp' не существует в C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post . php: 31 Трассировка стека:
# 0 C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post. php (31): PDOStatement-> execute ()
# 1 C : \ xampp \ htdocs \ php_REST_myblog \ api \ posts \ read. php (18): Post-> read ()
# 2 {main} добавлено C: \ xampp \ htdocs \ php_REST_myblog \ models \ Post. php на линии
31
Ниже приведен правильный код с двумя лишними пробелами.
$query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at
FROM '.$this->table. ' p
LEFT JOIN categories c ON p.category_id=c.id
ORDER BY p.created_at DESC';
Что происходит не так?