php - 无法让我的 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,这意味着语法可能是“好的”......但不幸的是,没有任何东西插入到我的数据库中。
我正式卡住了。有什么建议吗?恐怕答案可能很明显,但我不能指望它...
解决方案
推荐阅读
- html - 鼠标悬停不适用于带有下拉菜单或日期选择器或时间选择器等的卡片
- android - 状态栏字体颜色不会随着android中的片段Darktheme而改变
- django - 如何将 Model.viewset 中的查找字段更改为 Django Rest Framework 中的其他唯一参数?
- python - 使用脚本部分更新文档并添加缺失的字段
- elasticsearch - 如何从弹性搜索中获取失败删除数组(_delete_by_query)
- vuejs3 - Vue 3 中的 ref 与响应式?
- gremlin - 如何在 janusgraph 中将数组设置为属性?
- android - 通过 observables 监控互联网连接状态只运行一次
- android - 将数据从片段子 viewpager 传递到父 viewpager
- python - 在 python 3.8.2 中将 .py 文件转换为 .exe