Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064

You have an error in your SQL syntax; 'BY sort_order ASC' at line 1 in C:\xampp\htdocs\models\Category.php:12

Помогите,пожалуйста. Я кодировала интернет-магазин.

Проблема в файле Category.php

<?php 
class Category
{
    public static function getCategoriesList()
    {
        
        $db = Db::getConnection();
        $categoryList = array();

        $result = $db->query('SELECT id, name FROM category'
        . 'ORDER BY sort_order ASC');

        $i = 0;
        while ($row = $result->fetch()) {
            $categoryList[$i]['id'] = $row['id'];
            $categoryList[$i]['name'] = $row['name'];
            $i++;
        }
        return $categoryList;
    }
}

Файл Db.php

<?php 
class Db
{

    введите сюда код
    public static function getConnection()
    {
        $paramsPath = ROOT . '/config/db_params.php';
        $params = include($paramsPath);

        $options = [
            \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION, // сообщать об ошибках
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // чтобы не писать каждый раз
            \PDO::ATTR_EMULATE_PREPARES   => false, // для удобства
        ];
        

        $dsn = "mysql:host={$params['host']};dbname={$params['dbname']}";
        $db = new PDO($dsn, $params['user'], $params['password'], $options);
        $db->exec("set names utf8");
        return $db;
    }
}

Ответы (1 шт):

Автор решения: Andre Polykanine

Ошибка связана с тем, что не хватает пробела перед ORDER BY. Если убрать конкатенацию строк (зачем она здесь, кстати, только для сокращения общей длины строки?), то получится вот что:

$result = $db->query('SELECT id, name FROM categoryORDER BY sort_order ASC');

А должно быть так:

$result = $db->query('SELECT id, name FROM category ORDER BY sort_order ASC');

Поэтому SQL и ругается на синтаксическую ошибку.

→ Ссылка