mysqli_stmt_store_result(): 参数 #1 ($statement) 必须是类型 mysqli_stmt, bool

mysqli_stmt_store_result(): Argument #1 ($statement) must be of type mysqli_stmt, bool

完整错误:

Fatal error: Uncaught TypeError: mysqli_stmt_store_result(): Argument #1 ($statement) must be of type mysqli_stmt, bool given in C:\xampp\htdocs\TableClasses.php:986 Stack trace: #0 C:\xampp\htdocs\TableClasses.php(986): mysqli_stmt_store_result(true) #1 C:\xampp\htdocs\HospAdmin_createStaffValidation.php(62): TableClasses->createDoctor('test', 'test', 'G32434243G', 'Male', '2021-11-09', '234234224', 'test', 'ykk@gmail.com', 'Anaesthesiology', 'X-ray', '8989', '1_5yr') #2 {main} thrown in C:\xampp\htdocs\TableClasses.php on line 986

我遇到了这个错误,不确定它有什么问题

我的代码

        $allaccounts = mysqli_prepare($this->conn, "SELECT 'patient' as Role, FirstName, LastName, NRIC, password FROM patients WHERE NRIC = ? 
        UNION ALL 
        SELECT 'doctor', FirstName, LastName, NRIC, password FROM doctor WHERE NRIC = ?  
        UNION ALL 
        SELECT 'nurse', FirstName, LastName, NRIC, password FROM nurse WHERE NRIC = ? 
        UNION ALL 
        SELECT 'admin', FirstName, LastName, NRIC, password FROM administrator WHERE NRIC = ?  
        UNION ALL 
        SELECT 'HospitalAdmin', FirstName, LastName, NRIC, password FROM hospitaladmin WHERE NRIC = ?  ");

        mysqli_stmt_bind_param($allaccounts, "sssss", $NRIC, $NRIC, $NRIC, $NRIC, $NRIC);
        $AllAccstmt = mysqli_stmt_execute($allaccounts);
        mysqli_stmt_store_result($AllAccstmt);
        mysqli_stmt_close($allaccounts);
        
        $allaccounts_Email = mysqli_prepare($this->conn, "SELECT 'patient' as Role, FirstName, LastName, NRIC, password FROM patients WHERE Email = ? 
        UNION ALL 
        SELECT 'doctor', FirstName, LastName, NRIC, password FROM doctor WHERE email = ?  
        UNION ALL 
        SELECT 'nurse', FirstName, LastName, NRIC, password FROM nurse WHERE email = ? 
        UNION ALL 
        SELECT 'admin', FirstName, LastName, NRIC, password FROM administrator WHERE email = ?  
        UNION ALL 
        SELECT 'HospitalAdmin', FirstName, LastName, NRIC, password FROM hospitaladmin WHERE email = ?  ");

        mysqli_stmt_bind_param($allaccounts_Email, "sssss", $Email, $Email, $Email, $Email, $Email);
        $AllAcc_Email_stmt = mysqli_stmt_execute($allaccounts_Email);
        mysqli_stmt_store_result($AllAcc_Email_stmt);
        mysqli_stmt_close($allaccounts_Email);
        

        if (mysqli_stmt_num_rows($AllAccstmt) != 0 OR mysqli_stmt_num_rows($AllAcc_Email_stmt) != 0){

我正在尝试检查 select 语句是否为空。但它一直给我错误。

如错误消息所述,mysqli_stmt_store_result() 需要 mysqli_stmt 作为参数。您提供了一个布尔值。

修改代码如下:

mysqli_stmt_bind_param($allaccounts, "sssss", $NRIC, $NRIC, $NRIC, $NRIC, $NRIC);
mysqli_stmt_execute($allaccounts);
mysqli_stmt_store_result($allaccounts);

注意:在不对数据做任何事情的情况下立即关闭准备好的语句是没有意义的。删除 close.

execute() 的 return 值始终是布尔值。您的代码中不需要此值。对于 mysqli_stmt_num_rows($AllAccstmt),您将得到相同的错误,因此也更改它。