带有INSERT语句的MySQL语法错误1064

时间:2012-09-06 19:10:16

标签: php mysql mysql-error-1064

我使用此查询收到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);
}

4 个答案:

答案 0 :(得分:3)

你去了:

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

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

答案 1 :(得分:2)

很可能你似乎在某些时候过度景观。检查代码,您正在执行的查询。

我怀疑,不是转义字符串,而是转义整个查询。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

试一试:

    $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')";