我通常擅长于此,而在我完成项目时;我遇到了一个错误。 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。同样的错误。
我重做数据库,同样的错误。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, ... }
是reserved MySQL keyword,因此您应该对其进行转义:
LIMIT
实际上,应避免使用$sql = "INSERT INTO users (username, email, password, `limit`) ";
$sql .= "VALUES (:username, :email, :password, :theLimit)";
$records = $conn->prepare($sql);
或任何其他保留关键字来命名对象。否则,您将始终必须如上所述进行转义。