SQL 语法错误代码 1064

SQL Syntax Error Code 1064

我的代码在这里;

$m = 0.5;

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

我遇到了这个错误;

A Database Error Occurred

Error Number: 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 'where user = ''' at line 1

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

Filename: /home/modenatu/public_html/beta/models/model/mupdate.php

Line Number: 87

我找不到修复方法。提前致谢。

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

根据错误消息,$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 语句。

为了这个世界上所有美好美好的事物...我怎么强调都不为过...使用 prepared statements with bind placeholders .

例如:

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