Ошибка в команде обновления MySQL. (в php) - PullRequest
0 голосов
/ 24 июня 2009

Доброе утро всем,

Я использую команду обновления в php для обновления данных в mysql. Это мой код:

$sql=mysql_query("UPDATE blpublication SET JournalName = '$_POST[journal]', AcceptanceDate = '$_POST[acceptancedate]', PublishedDate = '$_POST[publisheddate]', Comment = '$_POST[comment]'
WHERE JobNo = '$_POST[jobno]'");

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "record Updated";

Обновляет поле, но выдает следующую ошибку. И я не могу понять, почему я получаю эту ошибку. «Ошибка: у вас есть ошибка в вашем синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, для правильного синтаксиса для использования около '1' в строке 1"

Можете ли вы помочь мне в этом

Лучший Zeeshan

Ответы [ 8 ]

3 голосов
/ 24 июня 2009

Можете ли вы сказать нам, что именно вывод $sql? Кстати, БОЛЬШАЯ дыра в безопасности есть. Вы должны всегда экранировать входные данные запроса, а именно:

$journal = mysql_real_escape_string($_POST['journal']);
$acceptance_date = mysql_real_escape_string($_POST['acceptancedate']);
$publish_date = mysql_real_escape_string($_POST['publisheddate']);
$comment = mysql_real_escape_string($_POST['comment']);
$job_no = intval($_POST['jobno']); // assuming jobNo is a number
$sql = <<<END
UPDATE blpublication
SET JournalName = '$journal',
AcceptanceDate = '$acceptance_date',
PublishedDate = '$publish_date',
Comment = '$comment'
WHERE JobNo = $jobno
END;
mysql_query($sql);
if (mysql_error()) {
  die("Error executing query '$sql': " . mysql_error());
}
echo "record Updated";
2 голосов
/ 24 июня 2009

Я думаю, проблема в том, что вы запускаете mysql_query дважды. В первый раз это работает и возвращает 1 (true), который вы назначаете $ sql. Затем вы снова вызываете mysql_query, передавая $ sql (что равно 1). Конечно, «1» не является допустимым запросом SQL, поэтому вы получите синтаксическую ошибку.

Я искренне согласен с тем, что вы должны очистить эти материалы!

2 голосов
/ 24 июня 2009

Я бы сначала очистил ваш ввод. Это может привести к некоторым очень неприятным ошибкам, таким как то, что вы экспериментируете, и вредоносным атакам. Посмотрите SQL-инъекция .

1 голос
/ 24 июня 2009

Глядя на оператор SQL UPDATE в вашем коде, меня бросает в глаза одна вещь. Имя таблицы - blpublication, возможно, вы пропустили 't', т.е. tblpublication?

Кроме того, вы должны действительно обезопасить свой ввод, иначе вы станете жертвой атаки SQL-инъекции .

1 голос
/ 24 июня 2009

Ваш общий синтаксис UPDATE выглядит нормально, за исключением очевидных возможностей внедрения, но вам нужно вывести $ sql. Возможно, в одной из ваших переменных есть кавычка или что-то в этом роде ...

1 голос
/ 24 июня 2009

Прежде всего, ваш код склонен к SQL-инъекции , экранируйте значения POST:

$journal = mysql_real_escape_string($_POST['journal']);

А для отладки вашего запроса нам нужен сам запрос. Добавьте оператор echo () перед фактическим выполнением запроса и опубликуйте результат, значения POST могут содержать неожиданное значение.

1 голос
/ 24 июня 2009

Как и в следующем посте , я считаю, что когда у вас есть какой-либо синтаксис объекта или массива, вам нужно заключить в фигурные скобки.

SET JournalName = '${_POST[journal]}'

edit: и да, как указывали другиечто вы рискуете инъекцией sql.

0 голосов
/ 14 июня 2012

Попробуйте объединить значения $ _POST. Не уверен, возможно ли их включение без кавычек?

$sql= mysql_real_escape_string("UPDATE blpublication SET JournalName = '".$_POST['journal']."', AcceptanceDate = '".$_POST['acceptancedate']."', PublishedDate = '".$_POST['publisheddate']."', Comment = '".$_POST['comment']."'
WHERE JobNo = '".$_POST['jobno']."'");
$result = mysql_query($sql);

Примечание: команды mysql_ * устарели. Вы должны переключиться на mysqli _ *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...