2009-07-14 81 views
0

我收到以下錯誤,我花了幾個小時看它,並找不出原因!語法錯誤與MySQL查詢

錯誤:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊正確的語法使用近「初級=」 doej2' ,二次=‘1’WHERE ID ='1行

這裏2」是我的代碼:

<?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

哦,小鮑比表將有他與你的方式。 – 2009-07-14 23:21:48

+0

-1用於SQL注入漏洞。 – Johan 2011-05-31 15:23:53

回答

6

「primary」是MySQL中的保留字。你可以把蜱圍繞它正確地使用它(以及其他領域:

$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'"); 
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']);