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