php - PHP注册无法使用prepare sql语句
问题描述
我使用 php 和 mysql prepare 语句编写了注册代码。我不知道为什么它不插入记录!谁能告诉问题出在哪里它没有显示任何错误或成功消息,即使这里是我的 adduser.php 代码
<?php
include 'config.php';
//checkusername
$check = $con->prepare("select username from users");
while($row = $check->fetch(PDO::FETCH_ASSOC)){
if($row['username'] == $_POST['username'])
echo -1;
else{
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$sql->bindParam($name,$username,$password);
$name = $_POST['name'];
$username = $_POST['username'];
$password = md5($_POST['password']);
$sql->execute();
echo 1;
}
}
?>
解决方案
$sql->bindParam($name,$username,$password);
是不正确的。您必须通过单独调用 bindParam 来绑定每个参数。
请参阅 PHP手册页中的参数列表和示例,了解 bindParam 函数接受什么作为输入,以及如何在实践中使用它。
例如
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$sql->bindParam(1, $name);
$sql->bindParam(2, $username);
$sql->bindParam(3, $password);
...
$sql->execute();
或者,您可以简单地调用执行函数并以这种方式传递参数数组:
$sql = $con->prepare("insert into users(name,username,password) values(?,?,?)");
$params = [$name, $username, $password];
$sql->execute($params);
PS 如果您在运行代码时没有收到任何类型的错误或有关此问题的指示,请确保您启用了 PHP 的错误记录功能和PDO 的异常报告模式,以便您可以获取有关代码中任何错误的详细信息。
PPS 请不要使用过时的、不安全的 md5 算法存储密码 - 这是一个安全风险。改为了解 PHP 内置的、最新的、安全的密码散列和验证功能。
PPPS 查询所有用户并遍历它们以查找具有相同用户名的任何现有记录是没有意义的。这是非常低效的。WHERE
您可以使用 中的 SQL子句更快更有效地过滤结果SELECT
,例如select username from users where username = ?
。将用户名绑定到该用户名,如果匹配,您将得到单行作为响应。
推荐阅读
- macos - 如何从本地 Kubernetes 连接到本地机器上的数据库
- angular - 在 Angular 中的模板渲染之前加载数据
- python - 如何通过 Selenium 和 Python 使用用户代理点击 youtube 评论中的链接
- vb6 - VB6 通用对话框
- gridview - Flutter,GridView中的“Stream已被收听”错误
- node.js - 同时等待选择器和导航
- sql - OPEN QUERY 中的 WHERE 子句
- r - 如何定义分位数回归图的名称?
- node.js - TypeError:无法读取属性“toLowerCase”
- python - Keras CNN 训练识别验证码:获取低损失和获取低准确率