【问题标题】:MySQL syntax error 1064 with INSERT statement [closed]带有 INSERT 语句的 MySQL 语法错误 1064 [关闭]
【发布时间】:2012-09-06 19:10:15
【问题描述】:

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

【问题讨论】:

  • 能否也添加您正在使用的 PHP 代码?
  • 你只是在参数上使用real_escape_string(),而不是在整个字符串上,不是吗?
  • 为什么这里有单引号? (NULL,'$file->name,$user_id)
  • @le_garry,抱歉,我是在匆忙中发布代码的。

标签: php mysql mysql-error-1064


【解决方案1】:

你去吧:

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

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

【讨论】:

  • 就是这样。谢谢。我会在一秒钟内接受答案。
  • 不客气 - 很高兴能提供帮助。您还应该考虑在查询中使用绑定参数 - 它们可以让您避免转义变量,并且更加安全。
  • 感谢您的提示。我会调查的。
【解决方案2】:

您很可能在某个时候似乎过度逃避。检查代码,这不是您正在执行的查询。

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

【讨论】:

    【解决方案3】:

    试试看:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 之前的也是。我认为你误解了' before 第一个反斜杠 - 它只是引用的查询片段。
      猜你喜欢
      • 2014-01-22
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多