MySQL错误“在'update'附近使用正确的语法”

时间:2014-02-16 13:33:46

标签: mysql pdo

我收到此错误未处理的异常。

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在第1行的'update,desc,indir,time)VALUES(?,?,?,?,?,?,?,1392556810)附近使用正确的语法

每当我提交表格时。这是源代码

if(!is_admin())
{
header("Location: $config->url");
exit;
}
$cid = intval($_GET['id']);
if($_GET['act'] == 'add')
{
$db->bind(id,$cid);
$file = $db->row("SELECT * FROM `".PREFIX."category` WHERE `id`=:id");
if(!$file)
{
$file = new stdClass();
$file->path = "/files";
}
if(!is_dir("..".$file->path))
{
header("Location: $config->url");
exit;
}
if($_POST['save'])
{
$name=$_POST['name'];
$icon=$_POST['icon'];
if($db->count("SELECT COUNT(id) FROM `".PREFIX."category` WHERE `path` = '".$file->path."/".$name."'") == 0)
{
$path=''.$file->path.'/'.$name.'';
$desc=$_POST['desc'];
if(isset($_POST['new']))
$new=1;
else
$new=0;
if(isset($_POST['update']))
$update=1;
else
$update=0;
$time=time();
$insert=$db->query("INSERT INTO ".PREFIX."category(name, path, icon, new, update, desc, indir, time) VALUES(:name, :path, :icon, :new, :update, :desc, :id, $time)", array("name"=>"$name","icon"=>"$icon","new"=>"$new","update"=>"$update","path"=>"$path","id"=>"$cid","desc"=>"$desc"));
if($insert>0)
{
mkdir("..".$file->path."/".$name,0777);
header("Location: $config->url/cat/".$cid."/'".htmli(converturl($file->name)).".html");
}
}
echo 'already exixs';
}
else
echo '<form method="post" action="#">Name : <input type="text" name="name" /><br/>Description : <input type="text" name="desc" /><br/>Icon : <input type="text" name="icon" /><br/><input type="radio" name="new" value="1" /> New<br/><input type="radio" name="update" value="1" /> Update<br/><br/><input type="submit" name="save" value="Add" /></form>';
}

2 个答案:

答案 0 :(得分:2)

这是您的insert声明:

INSERT INTO ".PREFIX."category(name, path, icon, new, update, desc, indir, time)
    VALUES(:name, :path, :icon, :new, :update, :desc, :id, $time)

几个列名是MySQL中的保留字。你需要逃脱它们:

INSERT INTO ".PREFIX."category(name, path, icon, `new`, `update`, `desc`, indir, `time`)
    VALUES(:name, :path, :icon, :new, :update, :desc, :id, $time);

保留字列表为here

通常,您应该避免将这些单词用作标识符。它们已经在MySQL中用于其他目的。但是,如果你必须使用它们,那么你每次都需要逃避它们。 (注意:我也逃过了“时间”。你会注意到保留字列表的末尾是少数允许的,因为它们已经如此常用。但是time是两者的名字。类型和功能,所以也应保留。)

答案 1 :(得分:0)

点击此处查询

$insert=$db->query("INSERT INTO 
".PREFIX."category(name, path, icon, new, update, desc

此处update / desc / new都是关键字/后备词;所以你必须像

那样引用它
$insert=$db->query("INSERT INTO 
".PREFIX."category(name, path, icon, `new`, `update`, `desc`