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'));
我的代码在这里;
$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'));