PHP + MySQL Ошибка - PullRequest
       15

PHP + MySQL Ошибка

0 голосов
/ 31 мая 2009
if ($_POST) {$content = stripslashes($_POST['content']);
    $by = $_SESSION['exp_user']['username'];
    $dt = date("F j, Y, g:i a"); 
    mysql_query("UPDATE tbl_intmsg SET time = ".$dt.", by = ".$by." AND content = ".$content."") or die(mysql_error());  

Для которого я получаю ошибку:

У вас ошибка в синтаксисе SQL; проверить руководство что соответствует вашей версии сервера MySQL для правильный синтаксис для использования около '26, 2009, 14:28, по = shamil.nunhuck И содержание = Тестовое сообщение! в строке 1

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 31 мая 2009

Вы могли бы также подумать о санации вашего ввода с помощью намеченной функции:

mysql_real_escape_string()

См .: http://uk3.php.net/manual/en/function.mysql-real-escape-string.php

3 голосов
/ 31 мая 2009

Да, ваш SQL выглядит так, когда его читает сервер MySQL:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = Test message!

Как MySQL выяснить, что есть в этом утверждении?

Представьте, например, что вы установили для своего $ content значение 0, ГДЕ dummy = true. Тогда ваш SQL будет выглядеть так:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = 0 WHERE dummy = true

Вы видите проблему? Как SQL может определить ваши данные и ключевые слова SQL?

Ответ: цитаты!

Ваш SQL должен выглядеть так:

UPDATE tbl_intmsg SET time = '26, 2009, 2:28 pm', by = 'shamil.nunhuck' 
    AND content = 'Test message!'

Ваша строка PHP-запроса PHP может выглядеть следующим образом:

$q="UPDATE tbl_intmsg SET time = '$dt', by = '$by' AND content = '$content'";

(Обратите внимание, что PHP анализирует строки в двойных кавычках для переменных и заменяет их значениями. Также обратите внимание, что вы должны использовать вышеупомянутую функцию

mysql_real_escape_string($var)

чтобы очистить ваши данные перед тем, как поместить их в MySQL. Вот ссылка, которую мехлер не смог опубликовать: php.net / mysql-real-escape-string )

Ура!

/ 0

1 голос
/ 31 мая 2009

поместите кавычки SQL вокруг ваших строковых переменных:

UPDATE tbl_intmsg SET time = \"".$dt."\", by = \"".$by."\" AND content = \"".$content."\"
1 голос
/ 31 мая 2009

Ага, вот ответ:

$db = mysql_query("UPDATE `tbl_intmsg` SET `time` = '".$dt."', `by` = '".$by."', `content` = '".$content."'");  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...