2009-07-14 65 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']);