php 检查电子邮件是否存在于 mysql 数据库中
php check if email exists in mysql database
出于某种原因,它总是 returns 0,即使数据库中有相同的电子邮件。我的语法有问题吗?当我在没有 prepare/execute 语句的情况下执行代码时,该代码有效。出于安全原因,这里有必要吗?
$email= $conn->real_escape_string($_POST['email']);
function emailExists($conn, $email) {
$stmt = $conn->prepare("SELECT 1 FROM accountInfo WHERE email=(?)");
$stmt->bind_param($email);
$stmt->execute();
return $stmt->num_rows;
}
echo emailExists($conn, $email);
不要使用 real_escape_string()
。当您使用参数绑定时,无需转义任何内容。
mysqli 中的参数绑定相当困难,因为您必须记住bind_param()
的奇怪语法。至少需要 2 个参数,第一个是表示值类型的字符串。你没有那个。
SQL 参数不需要括号。你可以做 email=?
.
当您想使用 SQL 检查某物是否存在时,则不需要使用 $stmt->num_rows
。可以在SQL中使用COUNT(1)
,这样应该更简单。事实上,忘记这个 function/property 的存在,因为它会导致许多像你这样的错误,而且通常没有用。
当我们解决所有小问题后,代码应该如下所示:
$email = $_POST['email'];
function emailExists(mysqli $conn, string $email):bool {
$stmt = $conn->prepare("SELECT COUNT(1) FROM accountInfo WHERE email=? LIMIT 1");
$stmt->bind_param('s', $email);
$stmt->execute();
return (bool) $stmt->get_result()->fetch_row[0];
}
echo emailExists($conn, $email);
您只需添加$stmt->store_result();
function emailExists($conn, $email) {
$stmt = $conn->prepare("SELECT 1 FROM accountInfo WHERE email=? LIMIT 1");
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows;
}
出于某种原因,它总是 returns 0,即使数据库中有相同的电子邮件。我的语法有问题吗?当我在没有 prepare/execute 语句的情况下执行代码时,该代码有效。出于安全原因,这里有必要吗?
$email= $conn->real_escape_string($_POST['email']);
function emailExists($conn, $email) {
$stmt = $conn->prepare("SELECT 1 FROM accountInfo WHERE email=(?)");
$stmt->bind_param($email);
$stmt->execute();
return $stmt->num_rows;
}
echo emailExists($conn, $email);
不要使用 real_escape_string()
。当您使用参数绑定时,无需转义任何内容。
mysqli 中的参数绑定相当困难,因为您必须记住bind_param()
的奇怪语法。至少需要 2 个参数,第一个是表示值类型的字符串。你没有那个。
SQL 参数不需要括号。你可以做 email=?
.
当您想使用 SQL 检查某物是否存在时,则不需要使用 $stmt->num_rows
。可以在SQL中使用COUNT(1)
,这样应该更简单。事实上,忘记这个 function/property 的存在,因为它会导致许多像你这样的错误,而且通常没有用。
当我们解决所有小问题后,代码应该如下所示:
$email = $_POST['email'];
function emailExists(mysqli $conn, string $email):bool {
$stmt = $conn->prepare("SELECT COUNT(1) FROM accountInfo WHERE email=? LIMIT 1");
$stmt->bind_param('s', $email);
$stmt->execute();
return (bool) $stmt->get_result()->fetch_row[0];
}
echo emailExists($conn, $email);
您只需添加$stmt->store_result();
function emailExists($conn, $email) {
$stmt = $conn->prepare("SELECT 1 FROM accountInfo WHERE email=? LIMIT 1");
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows;
}