如何检查MySQL中是否存在行? (即检查MySQL中是否存在电子邮件)

问题描述 投票:34回答:4

我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果:

email no longer exists [email protected]

这是我当前正在使用的代码:

if (count($_POST)) {
    $email = $dbl->real_escape_string(trim(strip_tags($_POST['email'])));

    $query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
    $result = mysqli_query($dbl, $query);
    if (is_resource($result) && mysqli_num_rows($result) == 1) {
        $row = mysqli_fetch_assoc($result);
        echo $email . " email exists " .  $row["email"] . "\n";
    } else {
        echo "email no longer exists" . $email . "\n";
    }
}

是否有更好的方法来检查MySQL中是否存在行(在我的情况下,请检查MySQL中是否存在电子邮件)?

php mysql mysqli pdo
4个回答
64
投票

以下经过尝试,测试和证明的方法来检查是否存在一行。

((其中一些我自己使用或曾经使用)。>>

Edit:

我在语法上犯了一个先前的错误,在此我两次使用mysqli_query()。请查阅修订。

即:

[if (!mysqli_query($con,$query)),应该简单地读为if (!$query)

  • 我很抱歉忽略了这个错误。
  • 旁注:

'".$var."''$var'都做相同的事情。您可以使用任何一种,两者都是有效的语法。

以下是两个已编辑的查询:

$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");

    if (!$query)
    {
        die('Error: ' . mysqli_error($con));
    }

if(mysqli_num_rows($query) > 0){

    echo "email already exists";

}else{

    // do something

}

以及您的情况:

$query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");

    if (!$query)
    {
        die('Error: ' . mysqli_error($dbl));
    }

if(mysqli_num_rows($query) > 0){

    echo "email already exists";

}else{

    // do something

}

您也可以使用mysqli_ with a prepared statement方法:

mysqli_

$query = "SELECT `email` FROM `tblUser` WHERE email=?"; if ($stmt = $dbl->prepare($query)){ $stmt->bind_param("s", $email); if($stmt->execute()){ $stmt->store_result(); $email_check= ""; $stmt->bind_result($email_check); $stmt->fetch(); if ($stmt->num_rows == 1){ echo "That Email already exists."; exit; } } }

Or a PDO method with a prepared statement
  • 准备好的语句最好用于帮助防止SQL注入。

  • NB。:

当处理上面使用/概述的表单和POST数组时,请确保POST数组包含值,表单使用POST方法并为输入匹配命名属性。

  • FYI:如果未明确指示,则窗体默认为GET方法。
  • 注意:<?php $email = $_POST['email']; $mysql_hostname = 'xxx'; $mysql_username = 'xxx'; $mysql_password = 'xxx'; $mysql_dbname = 'xxx'; try { $conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { exit( $e->getMessage() ); } // assuming a named submit button if(isset($_POST['submit'])) { try { $stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?'); $stmt->bindParam(1, $_POST['email']); $stmt->execute(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { } } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } if($stmt->rowCount() > 0){ echo "The record exists!"; } else { echo "The record is non-existant."; } } ?> -<input type = "text" name = "var">匹配。 $_POST['var']没有匹配项。

  • POST数组区分大小写。
  • 咨询:

  • $_POST['Var']
  • 错误检查引用:

  • 从连接到查询,您必须使用相同的密码。
  • 请咨询以下内容:

  • 是时候进入21世纪了。

  • 您还可以向(a)行添加UNIQUE约束。

参考:


7
投票

您必须执行查询并在查询中的$ email中添加单引号,因为它是一个字符串,并删除How add unique key to existing table (with non uniques rows) $ query是一个字符串,$ result将是资源


3
投票

在验证之后,在插入之前,请使用mysqli(procedural)检查用户名是否已存在。这有效:


2
投票

有多种方法来检查数据库中是否存在值。让我演示一下如何使用PDO和mysqli正确完成此操作。

© www.soinside.com 2019 - 2024. All rights reserved.