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 解释器在输入时知道参数的类型。因此,单引号是多余的(在这种情况下实际上是有害的)。您可以将字符串(或日期)参数视为与一对单引号一起进入查询字符串以将其标识为字符串。
我的 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 解释器在输入时知道参数的类型。因此,单引号是多余的(在这种情况下实际上是有害的)。您可以将字符串(或日期)参数视为与一对单引号一起进入查询字符串以将其标识为字符串。