我的sql prepare语句中有问题。 我尝试做选择查询以检查数据库中是否存在电子邮件,之后我检查该语句是否返回任何行,如果它的返回意味着该电子邮件已经存在并且我返回"发现电子邮件",如果不是它应该返回"未找到电子邮件"。
现在问题是我尝试检查的电子邮件是否存在于数据库中,但我仍然得到"未找到电子邮件"。
这是我的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个小时。 请帮忙。
答案 0 :(得分:3)
您不需要带有预准备语句的单引号。所以:
SELECT `Email` FROM `Accounts` WHERE `Email` = ?;
为什么不呢? SQL解释器在输入时知道参数的类型。因此,单引号是多余的(在这种情况下实际上是有害的)。您可以将字符串(或日期)参数视为进入查询字符串以及一对单引号,以将其标识为字符串。