当前位置: 首页 > 知识库问答 >
问题:

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

沙富
2023-03-14

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

email no longer exists publisher@example.com

这是我目前使用的代码:

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中是否存在电子邮件)?

共有3个答案

沃念
2023-03-14

在验证之后和插入之前,使用mysqli(过程)检查用户名是否已经存在。这个作品:

//check if username already exists
       include 'phpscript/connect.php'; //connect to your database

       $sql = "SELECT username FROM users WHERE username = '$username'";
       $result = $conn->query($sql);

       if($result->num_rows > 0) {
           $usernameErr =  "username already taken"; //takes'em back to form
       } else { // go on to INSERT new record
葛和志
2023-03-14

您必须执行您的查询,并在查询中添加单个引用到$email,因为它是一个字符串,并删除is_resource($Query)$Query是一个字符串,$结果将是资源

$query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
$result = mysqli_query($link,$query); //$link is the connection

if(mysqli_num_rows($result) > 0 ){....}

更新

在您的编辑库中,只需更改:

if(is_resource($query) && mysqli_num_rows($query) > 0 ){
        $query = mysqli_fetch_assoc($query);
        echo $email . " email exists " .  $query["email"] . "\n";

通过

if(is_resource($result) && mysqli_num_rows($result) == 1 ){
        $row = mysqli_fetch_assoc($result);
         echo $email . " email exists " .  $row["email"] . "\n";

你会没事的

更新2

更好的方法应该是有一个存储过程来执行以下SQL,并将电子邮件作为参数传递

SELECT IF( EXISTS (
                  SELECT *
                  FROM `Table`
                  WHERE `email` = @Email)
          , 1, 0) as `Exist`

并检索php中的值

伪密码子:

 $query = Call MYSQL_SP($EMAIL);
 $result = mysqli_query($conn,$query);
 $row = mysqli_fetch_array($result)
 $exist = ($row['Exist']==1)? 'the email exist' : 'the email doesnt exist';
范嘉
2023-03-14

以下是检查行是否存在的经过尝试、测试和验证的方法。

(其中一些是我自己用的,或者过去用过的)。

编辑:我之前在语法中犯了一个错误,我使用了两次mysqli\u 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_与准备好的语句方法一起使用:

$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;

            }
        }
    }

或带有准备好的语句的PDO方法:

<?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.";
    }


    }
?>
  • 准备好的语句最好用于帮助防止SQL注入

注意:

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

  • 仅供参考:如果没有明确指示,表单默认为GET方法。

注意:

  • POST数组区分大小写

咨询:

  • http://php.net/manual/en/tutorial.forms.php

检查引用时出错:

  • http://php.net/manual/en/function.error-reporting.php
  • http://php.net/manual/en/mysqli.error.php
  • http://php.net/manual/en/pdo.error-handling.php

请注意,MySQL API不会混合使用,以防您访问此Q

  • 从连接到查询必须使用相同的

请咨询以下内容:

  • 我可以在PHP中混合使用MySQL API吗

如果您使用的是mysql\uuAPI,并且没有选择使用它,那么请参考以下Q

  • MySql php:检查是否存在行

mysql.*函数已弃用,将从未来的PHP版本中删除。

  • 是时候踏入21世纪了

还可以向(a)行添加UniQUE约束。

参考资料:

  • http://dev.mysql.com/doc/refman/5.7/en/constraint-primary-key.html
  • http://dev.mysql.com/doc/refman/5.7/en/alter-table.html
  • 如何检查值是否已经存在以避免重复?
  • 如何将唯一键添加到现有表(具有非唯一行)

 类似资料:
  • 我需要帮助检查数据库中是否存在行。在我的例子中,该行包含一个电子邮件地址。我得到的结果是: 这是我目前使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的例子中,检查MySQL中是否存在电子邮件)?

  • 问题内容: 这可能是一件容易的事,但是我是一个业余爱好者,事情对我来说并不奏效。 我只想检查$ lectureName显示的行是否存在。如果某行确实存在$ lectureName,我希望该函数返回“ assigned”(如果没有),则它应返回“ available”。这就是我所拥有的。我相当确定这是一团糟。请帮忙。 当我这样做时,所有返回的内容都是可用的,即使应该返回已分配的内容。 问题答案: 这

  • 问题内容: 理论上听起来很简单,但是我已经做了很多研究,但很难弄清楚。 我如何检查MySQL表是否存在以及它是否在执行某些操作。(我猜一个简单的php if / else语句可以解决这个问题) 有没有办法做到这一点? 这是我对cwallenpoole的响应所做的: 问题答案: 诚然,它比Python惯用语言更具有Python风格,但另一方面,您不必担心要处理大量额外数据。 编辑 因此,截至我撰写此

  • 问题内容: 建立连接后是否可以检查(MySQL)数据库是否存在。 我知道如何检查数据库中是否存在表,但是我需要检查数据库是否存在。如果没有,我必须调用另一段代码来创建它并填充它。 我知道所有这些听起来都不太优雅-这是一个快速又肮脏的应用程序。 问题答案: 如果您只想知道数据库是否存在,以免在尝试创建数据库时出错,只需使用(From here):

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: MySQL检查表是否存在而不会引发异常 我的项目中有一个动态mysql查询生成器,可从不同的表创建选择查询。 我需要检查当前处理表是否存在。 假设我的表是table1,table2和table3。我的代码是这样的: 我该如何进行检查(请告诉我最简单的方法)。 问题答案: 更新的mysqli版本: 原始mysql版本: 从PHP

  • 问题内容: 我的网站已设置为没有用户名(或者说user.username = user.email)。如果用户尝试输入数据库中已经存在的用户名,则Django会显示一条错误消息,但是由于我没有使用用户名进行注册,所以我不知道该怎么做。 就像已经有默认设置一样,我不想重新加载页面以查找是否已经有与用户关联的电子邮件地址。我的猜测是使用Ajax,但我不知道该怎么做。Ive看过其他帖子,但最近似乎没有任