我的代码在这里;
$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
我找不到如何解决它。提前谢谢。
答案 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'));