Простой PHP/MySQL код ORM не выполняется

Я пытаюсь запустить простой запрос с ORM, который построен поверх PDO.

Вот код, который я пытаюсь запустить:

$message = ORM::for_table("messages")
 ->where("to_user_id", $user_id)
 ->where("deleted", 0)
 ->where("reply_id", $message_id)
 ->where("read", 0)
 ->order_by_desc("time")
 ->limit(1)
 ->count();

(Это использует j4mie Idiorm, https://github.com/j4mie/idiorm)

Этот код, похоже, будет работать, но я получаю следующую ошибку MySQL:

Error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: 
 Syntax error or access violation: 
 1064 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 'read = '0' ORDER BY time DESC LIMIT 1' 
 at line 1' in /Users/chromium/Documents/root/e119/lib/classes/ORM.class.php:492 
 Stack trace: 
 #0 /Users/chromium/Documents/root/e119/lib/classes/ORM.class.php(492): PDOStatement->execute(Array) 
 #1 /Users/chromium/Documents/root/e119/lib/classes/ORM.class.php(289): ORM->run() 
 #2 /Users/chromium/Documents/root/e119/app/models/Message.class.php(73): ORM->count() 
 #3 /Users/chromium/Documents/root/e119/app/views/Messages/IndexView.php(42): Message::conversation_changed('3', '4', true) 
 #4 /Users/chromium/Documents/root/e119/app/templates/GameTemplate.php(13): require('/Users/chromium...') 
 #5 /Users/chromium/Documents/root/e119/lib/classes/Load.class.php(83): require('/Users/chromium...') 
 #6 /Users/chromium/Documents/root/e119/app/controllers/M on line 492 of /Users/chromium/Documents/root/e119/lib/classes/ORM.class.php
1 ответ

read и time зарезервированы слова в mySQL.

Вам нужно будет переименовать столбцы или обернуть обратные ссылки вокруг имен столбцов:

->order_by_desc("'time'")
 ->where("'read'", 0)

(при условии, что ORM позволяет это, конечно.)

licensed under cc by-sa 3.0 with attribution.