Синтаксическая ошибка при запросе MySQL
-
13-09-2019 - |
Вопрос
Я получаю следующую ошибку, и я потратил часы на ее изучение и не могу понять, почему!
ОШИБКА:У вас есть ошибка в синтаксисе SQL;проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'primary='doej2', Secondary='1' WHERE id='2'' в строке 1.
Вот мой код:
<?php
if (isset($_POST[Edit])){
$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];
$query = mysql_query("UPDATE eventcal SET primary='$primary', secondary='$secondary' WHERE id='$id'");
if (!$query) {
$_SESSION['alert'] = 'ERROR: ' . mysql_error();
}
}?>
А вот моя структура таблицы событий:
CREATE TABLE `eventcal` (
`id` int(10) unsigned NOT NULL auto_increment,
`region` tinyint(3) unsigned NOT NULL,
`primary` varchar(25) NOT NULL,
`secondary` tinyint(1) NOT NULL,
`eventDate` date NOT NULL,
PRIMARY KEY (`id`),
KEY `primary_2` (`primary`),
KEY `secondary` (`secondary`),
CONSTRAINT `eventcal_ibfk_1` FOREIGN KEY (`primary`) REFERENCES `users` (`username`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
Может ли кто-нибудь увидеть, чего мне не хватает?Спасибо!
Решение
«основной» — зарезервированное слово в MySQL.Вы можете поставить галочки вокруг него, чтобы правильно его использовать (как и другие поля:
$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'");
Другие советы
«основной» — зарезервированное слово MySQL.Из документации:
Зарезервированные слова разрешены в качестве идентификаторов, если вы цитируете их, как описано в разделе 8.2: «Имена объектов схемы”.
Хуже синтаксической ошибки является Отверстие для SQL-инъекции:
Измените это:
ужас кодирования
$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];
В этот код
$id = mysql_real_escape_string($_POST['id']);
$primary = mysql_real_escape_string($_POST['primary']);
$secondary = mysql_real_escape_string($_POST['secondary']);