尝试访问布尔类型的数组偏移量

问题描述 投票:0回答:1
$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上工作]

php mysql
1个回答
0
投票

带有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."; }
© www.soinside.com 2019 - 2024. All rights reserved.