PHP / MySQL:如果记录已存在(无需更新),如何 return 信息

PHP / MySQL: How to return info if record already exists (without update)

我正在使用下面的代码将新行插入到 MySQL 数据库中。 此查询存储在 PHP 文件 (ajax.php) 中,输入值通过 jQuery 中的 Ajax 调用传递给此文件。

一切都按预期工作,但如果数据库中已有电子邮件,我想 return 向用户发送消息。 我知道如何使用 ON DUPLICATE KEY 更新数据库行,但是 谁能告诉我如何检查它并回显它是否已经存在[=25] =](即不更新它)?
(电子邮件是单个主键,因此我只需要检查此列。)

我的PHP:

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$dob = $_POST["dob"]; 
$sql = "INSERT INTO Users (email, dob) VALUES ('" . $email . "', '" . $dob . "')"; 
if ($conn->query($sql)){ 
    echo 'DB Update successful'; 
}else{ 
    echo 'DB Update failed'; 
} 
$conn->close();

您只需要在插入前进行简单的 SELECT 调用。

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$dob = $_POST["dob"];
$sql = "SELECT email FROM Users WHERE email = " .$email;
$query = $conn->query($sql);
if (mysqli_num_rows($query) > 0){
    echo "There exists an user with this email";
}
else {
    $sql = "INSERT INTO Users (email, dob) VALUES ('" . $email . "', '" . $dob . "')";
    if ($conn->query($sql)) {
        echo 'DB Update successful';
    }
    else {
        echo 'DB Update failed';
    };
}

$conn->close();

简单的方法就是计算 table 中与您尝试存储的电子邮件相同的条目的出现次数。计数而不是 SELECTing 意味着它更快,并且只返回一个计数而不是一个完整的行,您必须然后查看或计算结果中的行。

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}

$stmt = $Conn->prepare("Select Count(email) as cnt FROM Users WHERE email = ?");
$stmt->bind_param('s', $_POST["email"]);
$stmt->execute();
$stmt->bind_result($cnt)
$stmt->close();

if ( $Cnt > 0 ) {
    // its already there so do whatever you want in this case
} else {

    $sql = "INSERT INTO Users (email, dob) VALUES (?,?)"; 
    $stmt = $Conn->prepare($sql);
    $stmt->bind_param('ss', $_POST["email"],$_POST["dob"]);
    if ($stmt->execute(){ 
        echo 'DB Update successful'; 
    }else{ 
        echo 'DB Update failed'; 
    } 
}
$conn->close();