2009-07-14 4 views
0

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

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

}?> 

И вот моя структура таблицы для eventcal таблицы:

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 

Может кто-нибудь увидеть, что я не хватает? Благодаря!

+2

о, столики Bobby бы свой путь с вами. –

+0

-1 для отверстия для инъекций SQL. – Johan

ответ

6

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

$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'"); 
+0

Добавление тиков делало трюк. Я бы никогда не подумал об этом. Благодаря! – littleK

1

«первичный» является MySQL зарезервированное слово Из документации:.

Зарезервированные слова допускаются в качестве идентификаторов, если вам цитировать их, как описано в разделе 8.2 «Schema Object Names»

1

хуже, чем ошибка синтаксиса является SQL-injection hole:

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

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']); 
Смежные вопросы