Синтаксическая ошибка с MySQL Query - PullRequest
0 голосов
/ 15 июля 2009

Я получаю следующую ошибку, часами смотрю на нее и не могу понять, почему!

ОШИБКА: в вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с «primary =» doej2 », вторичным =« 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

Кто-нибудь может увидеть, что мне не хватает? Спасибо!

Ответы [ 3 ]

6 голосов
/ 15 июля 2009

«основной» является зарезервированным словом в MySQL. Вы можете поставить галочки вокруг него, чтобы правильно использовать его (а также другие поля:

$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'");
1 голос
/ 29 мая 2011

Хуже, чем синтаксическая ошибка, это дыра SQL-инъекции:

Изменить это:

enter image description here код ужаса

$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']);
1 голос
/ 15 июля 2009

'primary' - зарезервированное слово MySQL. Из документации:

Зарезервированные слова допускаются в качестве идентификаторов, если вы заключите их в кавычки, как описано в разделе 8.2, « Имена объектов схемы ».

...