SQL语法错误代码1064

时间:2015-01-14 21:40:36

标签: php mysql sql codeigniter mysql-error-1064

我的代码在这里;

$m = 0.5;

$this->db->query("update chatusers set money = money - ".$m." where user = '".$this->input->post('member')."'");

我收到了这个错误;

  

发生数据库错误

     

错误号码:1064

     

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的'where user ='''附近使用正确的语法

     

更新chatusers set money = money - where user =''

     

文件名:/home/modenatu/public_html/beta/models/model/mupdate.php

     

行号:87

我找不到如何解决它。提前谢谢。

2 个答案:

答案 0 :(得分:2)

$m显然没有导致查询语法无效的值。在尝试运行该查询之前,您需要验证$m是否具有有效值。 (仅供参考,$this->input->post('member')也没有任何价值,使用此值未经过规范会使您进行SQL注入。

答案 1 :(得分:2)

看起来$m正在根据错误消息评估空字符串。

看起来$this->input->post('member')也在评估一个空字符串。

update chatusers set money = money - where user = ''
                                    ^              ^

因为如果这两个字符串被评估为非空字符串(例如分别为'foo''bar'),我们希望SQL是这样的:

update chatusers set money = money - foo where user = 'bar'
                                     ^^^               ^^^

值得庆幸的是,$m没有评估为更邪恶的字符串。例如 money WHERE 1=1 --

哪会产生如下声明:

update chatusers set money = money - money WHERE 1=1 -- foo where user = ''

问题的症状是语法无效。这里真正的问题是1)SQL注入的可能性(我们没有看到$ m包含的值),以及2)代码产生无效的SQL语句。

为了这个世界上的一切美好和美丽...我不能强调这一点......使用准备好的陈述绑定占位符

例如:

  $sql = 'UPDATE chatusers SET money = money - ? WHERE user = ?';
  $this->db->query($sql, array(0, 'me'));