Codeigniter活动记录sql错误

时间:2010-05-05 15:28:43

标签: php mysql activerecord codeigniter

我在codeigniter中使用get_where()函数,我收到mysql错误,取决于我设置限制和偏移量,例如此代码,

$this->db->get_where('em_user', $whereArr, 30, 0)->num_rows()

返回一个看起来像这样的mysql错误

  
    

错误号码:1064

  
     

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法在'WHERE附近使用   email ='your@emailaddress.com'AND   password ='letmein'限制1'在   第2行

     

SELECT * WHERE email =   'your@emailaddress.com'AND   password ='letmein'限制1

但是,如果我运行此代码,

$this->db->get_where('em_user', $whereArr, 30, 30)->num_rows()

它似乎运行良好,似乎运行正常,它没有返回结果,但我没有得到错误(我假设没有结果是因为有一个偏移30,我的表中只有2条记录)

此代码生成的sql看起来像这样,

SELECT * FROM (`em_user`) WHERE `email` = 'your@emailaddress.com' AND `password` = 'letmein' LIMIT 30, 30

我不明白如果在查询结束时限制为1会导致如此多的悲痛,有人可以启发我吗?

3 个答案:

答案 0 :(得分:0)

该行

SELECT * WHERE email = 'your@emailaddress.com' AND password = 'letmein' LIMIT 1

没有FROM条款。我认为它应该是:

SELECT * from em_user WHERE email = 'your@emailaddress.com' AND password = 'letmein' LIMIT 1

答案 1 :(得分:0)

$this->db->get_where('em_user', $whereArr, 30, 30)->num_rows()不会得到任何结果。 num_rows()会给你结果的数量。

答案 2 :(得分:0)

我认为此错误与您的代码行无关

$this->db->get_where('em_user', $whereArr, 30, 0)->num_rows()

因为在错误消息中它出现LIMIT 1但在你的代码中你限制为30

无论如何你可以试试这行而不是get_where

$this->db->where($whereArr)->limit(30,0)->get('em_user');

并注意此行将返回num rows而不是记录

此外,您可以通过在get_where或查询后添加此行来查看查询以确定其是否正确

die($this->db->last_query());