$sql = $db->prepare("INSERT INTO users (user_username, user_password, user_email) VALUES ($username, $password, $email)");
$sql->bindParam(':user_name', $username);
$sql->bindParam(':user_password', $password);
$sql->bindParam(':user_email', $email);
$sql->execute();
我正在尝试学习PDO而不是使用mysql_但我遇到了问题。这似乎没有插入,我不知道为什么。
我没有收到任何错误消息,所以我不知道谷歌会发生什么。
此外,$ db变量是否在包含文件(config.php,其中包含所有数据库详细信息)中存在问题?
答案 0 :(得分:3)
尝试 -
$sql = $db->prepare("INSERT INTO users (user_username, user_password, user_email) VALUES (:user_name, :user_password, :user_email)");
$sql->bindParam(':user_name', $username);
$sql->bindParam(':user_password', $password);
$sql->bindParam(':user_email', $email);
$sql->execute();
在:user_name, ...
而非$db->prepare()
$username, ...
答案 1 :(得分:2)
首先,当您开发启用错误报告时,您可以看到任何错误消息。
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
执行您所拥有的代码应该会产生某种错误,因为您尝试绑定到不存在的参数。命名参数需要以:
开头,或者如果您更喜欢占位符类型参数,则可以使用?
代替。当你这样做时:
...VALUES ($username, $password, $email)"
变量将被解析为它们的实际值:
...VALUES (bob, $2y$14$youarehashingpasswordsright, bob@gmail.com)"
当然,这会是SQL中的语法错误。相反,您需要输入他们的参数名称:
......VALUES ( :username , :password , :email )"
然后,如果这不起作用,请查看正在生成的任何错误,并确保查询实际上已提交。