Код ошибки синтаксиса SQL 1064

Мой код здесь;

$m = 0.5;

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

и я получаю эту ошибку;

Ошибка базы данных Произошла

Номер ошибки: 1064

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом со строкой «где пользователь =» в строке 1.

обновить набор пользователей чата деньги = деньги — где пользователь = »

Имя файла: /home/modenatu/public_html/beta/models/model/mupdate.php

Номер строки: 87

Я не мог найти, как это исправить. Заранее спасибо.

0

Решение

Это выглядит как $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'));
2

Другие решения

$m явно не имеет значения, из-за которого ваш запрос имеет неверный синтаксис. Вы должны убедиться, что $m имеет действительное значение до Вы пытаетесь выполнить этот запрос. (FYI, $this->input->post('member') также не имеет значения, и при использовании этого значения unanitized подвергает вас инъекциям SQL).

2

По вопросам рекламы [email protected]