我的代码在这里;
$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
正在评估一个空字符串。
看起来 $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 注入(inject)(我们看不到 $m 包含什么值),以及 2) 代码正在生成无效的 SQL 语句。
为了这个世界上所有美好美好的事物...我怎么强调都不为过...使用准备好的语句和绑定(bind)占位符。。 p>
例如:
$sql = 'UPDATE chatusers SET money = money - ? WHERE user = ?';
$this->db->query($sql, array(0, 'me'));
关于php - SQL 语法错误代码 1064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27952958/