为什么这个PDO代码不会INSERT?

时间:2013-01-18 03:04:49

标签: php pdo

    $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,其中包含所有数据库详细信息)中存在问题?

2 个答案:

答案 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 )"

然后,如果这不起作用,请查看正在生成的任何错误,并确保查询实际上已提交。