当 php 中的第二个条件为真时,我收到一个白页

I recieve a white page when the second condition is true in php

我正在尝试创建一个条件,代码检查数据库中是否存在 phone 号码,然后检查用户名。

$query1 = "SELECT `Phone` FROM `NewUser` WHERE Phone=?";
$query2 = "SELECT `Username` FROM `NewUser` WHERE Username=?";

// checks the Phone number existence
if($stmt = $LINK->prepare($query1)){
    $stmt->bind_param("s", $Phone);
    if($stmt->execute()){
        $stmt->store_result();
        $Phone_check= "";         
        $stmt->bind_result($Phone_check);
        $stmt->fetch();
        if ($stmt->num_rows == 1){
            
            echo "That Phone already exists.";
            die();
        }
    }
}

// checks the Username existence
elseif($stmt2 = $LINK->prepare($query2)){
    $stmt2->bind_param("s", $User);
    if($stmt2->execute()){
        $stmt2->store_result();
        $User_check= "";         
        $stmt2->bind_result($User_check);
        $stmt2->fetch();
        if ($stmt2->num_rows == 1){
            echo "That Username already exists.";
            die();
        }
    }
}

如果第一个条件为真,我得到 phone 已经存在,但如果第二个条件发生,我得到一个白页。

当我交换条件时,我得到 “该用户名已经存在。”

正如评论中指出的那样,无论记录是否存在,if($stmt = $LINK->prepare($query1)) 都将 return 为真。您需要删除所有这些 if 语句并简化您的代码。

如果您不需要将数据提取到 PHP 中以将其用于其他用途,那么绝对没有理由提取它。您可以使用 SQL 检查该行是否存在。由于两列属于相同的 table,您也可以在一个语句中完成。

$stmt = $LINK->prepare("SELECT COUNT(*) FROM `NewUser` WHERE Phone=? OR Username=?");
$stmt->bind_param("ss", $Phone, $User);
$stmt->execute();   
$stmt->bind_result($exists);
$stmt->fetch();
if ($exists) {   
    echo "The phone number or the username already exists.";
    die();
}