首页 > 解决方案 > 无法让我的 PDO INSERT 按预期运行

问题描述

我正在学习 PHP,我想我会从准备好的语句开始,因为它们显然是很好的做法。我目前正在为注册表单编写原型,这是我第一次使用 PDO。我设法让这个工作,以检查用户名是否尚未被使用。

$stmt = $conn->prepare('SELECT username FROM `users` WHERE username = :username');
$stmt->bindParam(':username', $username, PDO::PARAM_STR); // Note: bindParam binds to the REFERENCE of the variable passed, only evaluated when execute() is called
$stmt->execute();
$result = $stmt->fetchColumn();

if ($result != NULL){
    die("2:Username already taken !");
}

像魅力一样工作,但是在插入时,我遇到了麻烦。这个非 PDO 版本可以正常工作(注意:是的,我目前正在上传一个非散列密码,但这只是在我可以让这个 PDO 语句工作之前,我会保护所有这些):

 $createuserquery = "INSERT INTO users (`iD`, `online`, `username`, `nickname`, `hash`) VALUES (NULL,'0','".$username."','".$username."','".$password."')";
mysqli_query($conn, $createuserquery) or die("4: Insert user query failed"); //error 4 : insert user query failed

我尝试转换它,结果是这样的:

$stmt2=$conn->prepare("INSERT INTO users (`iD`, `online`, `username`, `nickname`, `hash`) VALUES (':iD',':online',':username',':nickname',':password')");
$stmt->bindParam(':iD', NULL, PDO::PARAM_INT):
$stmt->bindParam(':online', '0', PDO::PARAM_BOOL);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':nickname', $username, PDO/:PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->execute();
echo "0"; //Just my check that the code was read until the end

这根本不返回任何内容(没有 0),这意味着我可能在某处有语法错误,但我找不到问题所在......经过几次不成功的尝试后,我尝试了另一种方法:版本略有不同,仅绑定用户名和密码并准备这样的声明:

    $stmt2=$conn->prepare("INSERT INTO users (`iD`, `online`, `username`, `nickname`, `hash`) VALUES (NULL,'0',':username',':username',':password')");
    $stmt->bindParam(':username', $username, PDO/:PARAM_STR);
    $stmt->bindParam(':password', $password, PDO::PARAM_STR);

这个确实返回 0,这意味着语法可能是“好的”......但不幸的是,没有任何东西插入到我的数据库中。

我正式卡住了。有什么建议吗?恐怕答案可能很明显,但我不能指望它...

标签: phpmysqlpdoinsert

解决方案


推荐阅读