php - SQL 语法错误代码 1064

标签 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')."'");

我收到了这个错误;

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/

相关文章:

javascript - Angular 2 和 Laravel 5.2 - 显示不同的 Blade 模板

javascript - php 文件中的弹出警报脚本

php - 在php sql语句中动态更改偏移量

mysql - 循环表中数字列的总计(不是查询的总计)

Mysql:为每个日期执行查询

sql - 使用 'ON CONFLICT DO NOTHING' 插入触发器

php - 将对象转换为数组 PHP - 仅公共(public)字段

php - 我能够以 json 格式从 facebook 获取数据,但无法插入数据库。

mysql - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) when authentication_string is correct

php mysql 不再能够插入(错误的整数值 : '' for column 'id' at row 1 )