繁体   English   中英

MySQL查询的语法错误

[英]Syntax Error with MySQL Query

我收到以下错误,我已经花了数小时研究它,却找不到原因!

错误:您的SQL语法有错误。 检查与您的MySQL服务器版本相对应的手册,以在第1行的'primary ='doej2',secondary ='1'WHERE id ='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

谁能看到我所缺少的吗? 谢谢!

“ primary”是MySQL中的保留字。 您可以在其周围打勾以正确使用它(以及其他字段:

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

“ primary”是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']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM