SQL "UPDATE" выдает ошибку

Я создал простую систему блогов на процедурном PHP, где пользователь может создавать новые сообщения, просматривать существующие сообщения, так что это система CRUD.

Вот мой код:

  if (isset($_POST['submit'])) {
  $titel = $_POST['titel'];
  $kortbeskrivelse = $_POST['kortbeskrivelse'];
  $skrib = $_POST['skrib'];
  $post = $_POST['post'];

  $update = "UPDATE posts SET ";
  $update .= "title = '{$titel}', ";
  $update .= "kortbe = '{$korbeskrivelse}', ";
  $update .= "author = '{$skrib}', ";
  $update .= "beskrivelse = '{$post}', ";
  $update .= "WHERE id=$pid LIMIT 1";

  $updateresult = mysqli_query($conn, $update);

  if (mysqli_query($conn, $updateresult)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $updateresult . "<br>" . mysqli_error($conn);
} 

}

Итак, чтобы объяснить запрос, я обновляю сообщения с помощью переменных, переданных из формы POST.

Переменная $ pid предназначена для обеспечения обновления правильного сообщения (я объявил его перед запросом sql)

Я не получаю ошибок PHP, и соединение работает отлично. Это ошибка SQL:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id= LIMIT 1' at line 1

Это немного сбивает с толку, и я боюсь, что это ошибка 40 (человеческая ошибка: D)

Я знаю, что это очень небезопасно, также для демонстрации инъекций и т. д.

Я надеюсь, что кто-нибудь сможет мне помочь!

Заранее спасибо!

также добавьте свой код формы

vivek modi 17.06.2018 11:08

Судя по всему, $pid дает пустую строку.

dnoeth 17.06.2018 11:15

Прочтите, пожалуйста, о SQL-инъекция. Ваш код уязвим.

sticky bit 17.06.2018 17:14

Липкий бит, пожалуйста, прочтите сообщение :-D

2accbot 18.06.2018 16:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
93
4

Ответы 4

В этой строке $update .= "beskrivelse = '{$post}', "; есть запятая. Попробуйте удалить его:

$update .= "beskrivelse = '{$post}' ";

можем ли мы '{}' в нашем запросе

vivek modi 17.06.2018 11:09

да, попробуйте прочитать здесь: php.net/manual/en/…

spielerds 17.06.2018 11:11

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

2accbot 17.06.2018 11:14

чем это было. это еще одна ошибка ... попробуйте print $update; exit(); перед mysqli_query и покажите нам результат.

spielerds 17.06.2018 11:16

Хм, странно .. теперь он говорит ОБНОВЛЕНИЕ сообщений SET title = 'a', kortbe = '', author = 'a', beskrivelse = 'a' WHERE id = LIMIT 1 - похоже, он не получает kortbe или id .

2accbot 17.06.2018 11:23

да, похоже, $pid не определяется. У тебя он тоже есть в $_POST?

spielerds 17.06.2018 11:24

вы можете добавить переменную $pid в свою форму в качестве скрытого ввода (например, <input type = "hidden" name = "pid" value = "$pid">), а затем после if здесь использовать $pid = $_POST['pid']

spielerds 17.06.2018 11:27
$update = "UPDATE posts SET ";
$update .= "title = '$titel', ";
$update .= "kortbe = '$korbeskrivelse', ";
$update .= "author = '$skrib', ";
$update .= "beskrivelse = '$_POST[beskrivelse]' ";
$update .= "WHERE id=$pid LIMIT 1";

измените свой код, как это, не используйте скобки {} в запросе и удалите ',' из последнего обновления $ и поместите какое-либо значение в '$ pid'

Попробуй это:

$update .= "WHERE id = {$pid} LIMIT 1";

Текстовый формат с $ pid возвращает не значение «PID», а текст «$ pid».

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно как и Зачем, он решает проблему, что улучшит долгосрочную ценность ответа.

Alexander 17.06.2018 11:18

your MySQL server version for the right syntax to use near 'WHERE id= LIMIT 1' at line 1

Присмотритесь, и вы заметите id=. Для операции = нет rvalue. По какой-то причине ваш $pid пуст. Во фрагменте кода не показано, откуда взялся $pid.

Кроме того, после последнего столбца ставится запятая.

$update = "UPDATE posts SET ";
$update .= "title = '{$titel}', ";
$update .= "kortbe = '{$korbeskrivelse}', ";
$update .= "author = '{$skrib}', ";
$update .= "beskrivelse = '{$post}' "; // removed comma
$update .= "WHERE id=$pid LIMIT 1";

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

Спасибо, и, пожалуйста, прочтите пост: D Он должен быть уязвимым.

2accbot 18.06.2018 16:04

Другие вопросы по теме