#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 Я загружал на тестовый сервер в реальном времени, а не на тестовый сервер без доступа, это всегда самая простая вещь…