Простой код PHP / MySQL ORM не выполняется - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь выполнить простой запрос с 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's 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 Ответ

2 голосов
/ 20 февраля 2012

read и time являются зарезервированными словами в mySQL.

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

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

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

...