INSERT语句出现MySQL语法错误1064


MySQL syntax error 1064 with INSERT statement

我使用此查询时遇到MySQL语法错误(1064)。我已经在SO上搜索了几十个mysql语法问题,疯狂地在谷歌上搜索,盯着这个SQL语句看也无济于事。在执行该语句之前,我使用的是mysqli的real_escape_string()。我曾尝试(在绝望中)从查询中删除所有换行符,但这无济于事。错误的原因是什么?

INSERT INTO `file_upload`.`files` (
    `id`,
    `name`,
    `user_id`
) 
VALUES (
    NULL,
    'filename.txt',
    1
)

我得到的错误信息是:

查看与MySQL服务器版本对应的手册,了解在第1行的"filename.txt''',1)"附近使用的正确语法

编辑

这是PHP代码。Connection是一个mysqli对象。

public function add_file_to_user($file, $user_id) {
    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)";
    $res = $this->query($query);
    die($this->connection->errno . $this->connection->error);
}
private function query($str) {
    $str = $this->connection->real_escape_string($str);
    return $this->connection->query($str);
}

好了:

private function query($str) {
    $str = $this->connection->real_escape_string($str);
    return $this->connection->query($str);
}

你正在逃避整个查询;你只需要逃离你传递给它的变量。

public function add_file_to_user($file, $user_id) {
    $filename = $this->connection->real_escape_string($file->name);
    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$filename',$user_id)";
    $res = $this->query($query);
}
private function query($str) {
    return $this->connection->query($str);
}

(虽然我还没有测试它是否有效)

很可能你在某个时候似乎过于挑剔了。检查代码,这不是您正在执行的查询。

我怀疑,与其转义字符串,不如转义整个查询。

试试看:

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)";

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name','$user_id')";

查看您的错误('''filename.txt'',1)'),文件名周围的单引号似乎被转义,导致引发此错误。看来您可能正在逃避INSERT查询。