简单的PHP / MySQL ORM代码不执行

时间:2012-02-19 20:27:05

标签: php mysql pdo idiorm

我正在尝试使用构建在PDO之上的ORM运行简单查询。

这是我正在尝试运行的代码:

$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 个答案:

答案 0 :(得分:2)

在mySQL中,

readtimereserved words

您必须重命名列,或在列名称周围包装反引号:

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

(当然ORM允许这样做。)