【问题标题】:MySQL error "right syntax to use near 'update"MySQL错误“在'更新附近使用正确的语法”
【发布时间】:2014-02-16 13:33:46
【问题描述】:

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

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>';
}

【问题讨论】:

标签: mysql pdo


【解决方案1】:

这是您的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 是一个类型的名称和函数,所以也应该保留。)

【讨论】:

    【解决方案2】:

    在此处查看您的查询

    $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`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多