Проблемы с синтаксисом запроса обновления MYSQL

#mysql #sql #syntax-error #sql-update

#mysql #sql #синтаксическая ошибка #sql-обновление

Вопрос:

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

Любой совет был бы высоко оценен

 $title = $_POST["title"];
$alttext = $_POST["alttext"];
$description = $_POST["description"];
$price = $_POST["price"];
$id = $_POST["ID"];
$insertQuery = "UPDATE cmsproducts SET Title = '$title', Alt_Text = '$alttext', Source = '$target_path', Description = '$description', Price = $price WHERE ID = $id";

// Save the form data into the database 
if ($result = $connector->query($insertQuery)){

// It worked, give confirmation
echo '<center><b><span style="color: #FF0000;">Product added to the database</span></b></center><br /><br />';

}else{

// It hasn't worked so stop. Better error handling code would be good here!
echo('<center>Sorry, there was an error saving to the database</center>');
echo "<center><b>File Name:</b> ".$target_path."<br/>";
die(mysql_error());


}
  

Я попробовал запрос без переменных, чтобы проверить, была ли там проблема, но он по-прежнему выдавал мне ошибку:

Извините, произошла ошибка при сохранении в базе данных У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘of test, Source = ../images / Картинки /, Описание =Это тестовое изображение теста ‘ в строке 1

Комментарии:

1. повторите вашу переменную $InsertQuery и проверьте окончательный запрос. Может быть, что-то пустое или имеет какие-либо проблемы с форматом / кодировкой, кто знает (кстати, вы не проверяете ввод POST, это проблема безопасности).

2. Мы не сможем вам помочь, пока вы не сообщите нам, что передается в переменных «post», а также как выглядит схема БД. Также вы ДОЛЖНЫ защитить от SQL-инъекций!!

3. Это также проблема безопасности. Возможно, вы захотите использовать mysql_real_escape_string или другие средства для предотвращения атак с использованием sql-инъекций.

4. Напишите описание ';delete from cmsproducts-- , я смею вас!

5. Спасибо всем вам за беспокойство по поводу внедрения SQL =] На самом деле у меня проверки проверки выполняются дальше по странице, на данный момент это без проверок безопасности. Я добавлю код после того, как он заработает.

Ответ №1:

Всегда избегайте пользовательского ввода ( mysql_real_escape_string ) или используйте PDO и назначайте параметры. Кажется, что $alttext переменная содержит кавычки или другой специальный символ. Например,

 $title = mysql_real_escape_string($_POST["title"]);
$alttext = mysql_real_escape_string($_POST["alttext"]);
$description = mysql_real_escape_string($_POST["description"]);
$price = mysql_real_escape_string($_POST["price"]);
$id = mysql_real_escape_string($_POST["ID"]);
$insertQuery = "UPDATE cmsproducts SET Title = '$title', 
   Alt_Text = '$alttext', Source = '$target_path',
   Description = '$description', Price = '$price' WHERE ID = '$id'";
  

Ответ №2:

Кажется, вы не экранируете кавычки, поскольку в вашем столбце Description должна быть одинарная кавычка внутри. Используйте mysql_real_escape_string для экранирования кавычек.

Комментарии:

1. После добавления mysql_real_escape_string и добавления моих проверок проверки я пришел к осознанию того, что я загружал не на тот сайт, LOL Я загружал на тестовый сервер в реальном времени, а не на тестовый сервер без доступа, это всегда самая простая вещь…