使用PHP检查数据库中是否已存在电子邮件ID

使用PHP检查数据库中是否已存在电子邮件ID,php,mysql,Php,Mysql,我试图检查数据库中是否已经存在电子邮件,如果存在,则在屏幕上显示消息,并且不运行PHPMailer。所以我使用下面的代码。已存在的电子邮件未按我的要求保存在数据库中,但PHPMailer仍在运行,且消息未显示 <?php include_once 'includes/dbh.php'; require 'email/PHPMailerAutoload.php'; $email = $_POST['emailFor']; $sql = mysqli_query($conn, &quo

我试图检查数据库中是否已经存在电子邮件,如果存在,则在屏幕上显示消息,并且不运行PHPMailer。所以我使用下面的代码。已存在的电子邮件未按我的要求保存在数据库中,但PHPMailer仍在运行,且消息未显示

<?php

include_once 'includes/dbh.php';
require  'email/PHPMailerAutoload.php';

$email = $_POST['emailFor'];

$sql = mysqli_query($conn, "SELECT * FROM `people` WHERE email=?");
$stmt = $conn->prepare($sql); 
$stmt->bind_param("i", $email);
$stmt->execute();
$result = $stmt->get_result(); 
$query = $result->fetch_assoc(); 


if(mysqli_num_rows($result)>0){
    echo "This email has already been registered";
} else {
    // ==== INSERT VALUES INTO DB 
    $stmt = mysqli_prepare($conn, "INSERT INTO people (email) VALUES (?);");

    mysqli_stmt_bind_param($stmt, 's', $email);
    $result = mysqli_stmt_execute($stmt);
}

$mail = new PHPMailer;

$mail ->isSMTP();

一个好方法是在
电子邮件
列上创建一个唯一的索引,然后您可以使用
插入忽略到
而不是简单插入,然后您可以检查受影响的行
以确定插入是否成功或电子邮件已存在于表中:

$stmt = mysqli_prepare($conn, "INSERT IGNORE INTO people (email) VALUES (?);");

mysqli_stmt_bind_param($stmt, 's', $email);
$result = mysqli_stmt_execute($stmt);

if(mysqli_affected_rows($result) === 1) {
    // email was new, here you should send the email
    $mail = new PHPMailer;
}
else {
     echo "This email has already been registered";
}

检查行数,然后显示消息或更新数据库。无论结果如何,对PHPMailer的调用都会运行。您可能需要退出
echo“This email…”后
exit
是的,我试图退出;或“break;”但是消息没有出现并导致错误(HTTP错误500),然后您需要查看服务器错误日志以找出500错误的原因。顺便说一下,为什么在
INSERT
查询中使用准备好的语句,而不是在
SELECT
查询中使用准备好的语句
SELECT
与我编辑并试图创建的任何其他语句一样容易受到SQL注入的攻击。你能看出来它是否正确吗?这非常有效,我甚至不知道存在插入忽略。谢谢。@VitorFreitas我很高兴能帮上忙