Вы используете
SORT BY
В SQL синтаксис должен быть:
ORDER BY
См. https://dev.mysql.com/doc/refman/8.0/en/select.html
Вам также следует проверять наличие ошибок после каждого вызова query()
или prepare()
или execute()
. Или же разрешите драйверу выдавать исключения при возникновении ошибок.
В Mysqli это можно сделать, включив режим отчета перед подключением:
mysqli_report(MYSQLI_REPORT_ALL);
$conn = new mysqli(...);
Я проверил ваш код, и когда я включил исключения, я получил это:
Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near 'BY
`OrderID` ASC' at line 5 in /Users/bkarwin/p.php:26
Возвращает ошибку для слова BY
, поскольку думает, что вы используете SORT
в качестве псевдонима таблицы для предыдущей таблицы.
В PDO это делается путем включения исключений при ошибке после подключения:
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Если вы не включите автоматические исключения, вам придется проверить возвращаемое значение query()
и prepare()
и execute()
, которые возвращают FALSE в случае ошибки. Это работает одинаково в Mysqli и PDO.
Ваш комментарий:
Если вы правильно понимаете SQL, код PDO должен работать. Но я бы написал по-другому:
function read(){
$query = "
SELECT
*
FROM
`{$this->table_name}`
ORDER BY OrderID ASC";
$stmt = $this->conn->prepare($query);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
Полагаю, вы хотите использовать ORDER BY
так же, как в коде Mysqli.
Я избегаю использования конкатенации строк с .
в PHP при построении SQL-запросов. Для конкатенации строк слишком легко вводить ошибки.
Я бы также вернул извлеченные строки, а не оператор из этой функции, чтобы упростить вызывающий код.