我在codeigniter中使用get_where()
函数,我收到mysql错误,取决于我设置限制和偏移量,例如此代码,
$this->db->get_where('em_user', $whereArr, 30, 0)->num_rows()
返回一个看起来像这样的mysql错误
错误号码:1064
您的SQL语法有错误; 检查对应的手册 您的MySQL服务器版本 正确的语法在'WHERE附近使用
password
='letmein'限制1'在 第2行SELECT * WHERE
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会导致如此多的悲痛,有人可以启发我吗?
答案 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());