$query = $pdo -> prepare("SELECT * FROM Users WHERE Username =:Username");
$query->bindParam(':Username', $name);
$query->execute();
$nameRes = $query->fetch(PDO::FETCH_ASSOC);
if ($nameRes['Username']==$_POST['username']) {
die ("Username is already in use!");
}
$query = $pdo -> prepare("SELECT * FROM Users WHERE Email =:Email");
$query->bindParam(':Email', $email);
$query ->execute();
$emailRes = $query->fetch(PDO::FETCH_ASSOC);
if ($emailRes['Email']==$_POST['email']) {
die ("Email is already in use!");
}
我在我的应用程序的注册页面上有此代码,并且可以免费使用用户名但不能使用电子邮件,反之亦然,我会收到此代码
注意:尝试访问类型为bool的值的数组偏移量
确定结果返回false,但是在这种情况下该怎么办?注意:这是在php v7.4上,这同样在v7.3上工作]
带有bindParam的简单解决方案,用于检查用户名。
$username = trim($_POST["username"]);
$sql = "SELECT id FROM users WHERE username = :username";
if($stmt = $pdo->prepare($sql)){
$stmt->bindParam(":username", $username, PDO::PARAM_STR);
if($stmt->execute()){
if($stmt->rowCount() === 1){
echo "This username is already taken.";
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
这里没有绑定
$username = trim($_POST["username"]);
$sql = "SELECT id FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username]);
if($stmt->rowCount() === 1){
echo "This username is already taken.";
}
在qirel评论中,您可以像选择计数一样计数
$count = $stmt->rowCount();
if($count === 1){
echo "This username is already taken.";
}
正如我说的,选择计数更有效! qirel就是这样说的,请使用以下代码代替rowCount();
if ($stmt->fetch()) { echo "This username is already taken."; }