Ошибка в команде обновления MySQL. (в php)

0

Доброе утро,

Я использую команду update в 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

  • 1
    Сделайте "echo $ sql;" перед отправкой запроса на сервер MySQL, чтобы проверить, что на самом деле отправляется на сервер. Также обратите внимание, что вы НИКОГДА не должны помещать пользовательский ввод непосредственно в SQL-запрос (он же «SQL-инъекция») - всегда фильтруйте, проверяйте и / или дезинфицируйте пользовательский ввод!
  • 2
    мой господин. это хак SQL инъекция просто ждет, чтобы произойти.
Показать ещё 1 комментарий
Теги:

8 ответов

3
Лучший ответ

Можете ли вы рассказать нам, какой именно вывод $sql? Кстати, там есть BIG. Вы должны всегда выполнять входные запросы запроса, а именно:

$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";
  • 0
    спасибо Клетус. Теперь работает отлично. :)
2

Сначала я бы дезактивировал ваш вход. Это может привести к очень неприятным ошибкам, таким как то, что вы испытываете и злонамеренные атаки. Посмотрите SQL Injection.

2

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

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

  • 0
    Я продезинфицировал свой вклад. благодарю вас
1

Прежде всего, ваш код подвержен SQL injection, избегайте значений POST:

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

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

1

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

Также вы должны действительно дезинфицировать свой ввод, иначе вы станете жертвой SQL-инъекции.

  • 0
    Спасибо. я дезинфицировал свой вклад. и теперь это работает хорошо. Спасибо
1

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

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

edit: и да, как указывали другие, вы рискуете использовать SQL-инъекцию.

  • 0
    Ммм ... неправильный язык? В PHP нет SET. И вы можете использовать его без брекетов.
  • 0
    @soulmerge - SET находится в запросе SQL.
Показать ещё 1 комментарий
1

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

0

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

$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_ *.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню