Select 查询 return 0 行带有 prepare 语句

Select query return 0 rows with prepare statement

我的 sql 准备语句有问题。 我尝试做 select 查询来检查数据库中是否存在电子邮件,之后我检查语句 return 是否有任何行,如果它的 return 表示电子邮件已经存在并且我 return "Email found",如果不是,它应该 return "Email not found".

现在的问题是我尝试检查的电子邮件是否存在于数据库中,但我仍然收到 "Email not found"。

这是我的 php 代码:

try{
        $servername = "localhost";
        $dbusername = "xxx";
        $dbpassword = "xxx";
        $dbname = "xxx";

        // Create connection
        $conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);

        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }


        $stmt = $conn->prepare(" SELECT `Email` FROM `Accounts` WHERE `Email`='?' ");
        // set parameters and execute            
    $emaila = "test001@gmail.com"; 
        $stmt->bind_param('s', $emaila);
        $stmt->execute();
    // if the email is not found
        if(mysqli_stmt_num_rows($stmt) == 0){
            $stmt->close();
            $conn->close();
            $data['success'] = false;
    $data['message']  = 'Email not found';
            echo json_encode($data);
        }
        else{
            $stmt->close();
            $conn->close();
            $data['success'] = false;
    $data['message']  = 'Email found';
            echo json_encode($data);
        }

    }
    catch(Exception $e){
        $data['success'] = false;
        $data['message'] = 'Error found';
        echo json_encode($data);
    }

我尝试使用这些引号,但它不起作用,我花了 3 个小时。 请帮忙。

准备好的语句不需要单引号。所以:

SELECT `Email` FROM `Accounts` WHERE `Email` = ?;

为什么不呢? SQL 解释器在输入时知道参数的类型。因此,单引号是多余的(在这种情况下实际上是有害的)。您可以将字符串(或日期)参数视为与一对单引号一起进入查询字符串以将其标识为字符串。