【问题标题】:Why is this giving me a syntax error? PHP PDO [duplicate]为什么这会给我一个语法错误? PHP PDO [重复]
【发布时间】:2019-09-23 02:08:22
【问题描述】:

我通常很擅长这个,在我完成我的项目时;我遇到了一个错误。 PDO 给了我一个语法错误,我无法理解。也许我只是累了,但这让我发疯。

这是我用于我的 PHP 代码的内容:

$records = $conn->prepare('INSERT INTO users (username, email, password, limit) VALUES (:username, :email, :password, :theLimit)');
$records->bindParam(':username', $_POST['username']);
$records->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));
$records->bindParam(':email', $_POST['email']);
$records->bindParam(':theLimit', $_GET['amt']);

我的数据库如下:

CREATE TABLE `users` (
  `id` int(11) UNSIGNED NOT NULL,
  `username` varchar(250) NOT NULL DEFAULT '',
  `email` varchar(250) NOT NULL DEFAULT '',
  `password` varchar(200) NOT NULL DEFAULT '',
  `limit` varchar(200) NOT NULL DEFAULT '',
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我得到的错误是这样的:

Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit) VALUES ('F', 'some_person@email.com', '$2y$10$gacC/a8zA3jCbPpKNTddtu4dBG' at line 1 )

最后,URL 如下所示:

https://website.com/reg.php?serial=306019525D31&amt=10

我什至尝试过:

$records->bindParam(':theLimit', $_POST['email']);

认为它可能是 URL。同样的错误。

我重做了数据库,同样的错误。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    LIMITreserved MySQL keyword,所以你应该转义它:

    $sql = "INSERT INTO users (username, email, password, `limit`) ";
    $sql .= "VALUES (:username, :email, :password, :theLimit)";
    $records = $conn->prepare($sql);
    

    实际上,您应该避免使用LIMIT 或任何其他保留关键字来命名您的对象。否则,您将始终必须像上面那样逃避它们。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2017-07-28
      • 1970-01-01
      • 2013-11-14
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多