【问题标题】:Having issues with verifying if email exists in data base验证数据库中是否存在电子邮件时遇到问题
【发布时间】:2016-09-01 02:51:12
【问题描述】:

我正在创建一个用户管理系统。我希望 php 脚本验证数据库中是否已存在电子邮件地址。我可以更新用户数据。我可以验证正确的电子邮件格式。我的脚本中不起作用的部分是检查电子邮件是否已在使用中的部分。这是不起作用的部分:

    if($_POST['email'] !=$_POST['email'])
    {

    $query_email = "
         SELECT
         from users
         where
         email = :email
    ";

    $query_goes = array(

    ':email' => $_POST['email']

    );
    try
    {

        $stmt = $db->prepare($query_email);
        $result = $stmt->execute($query_goes);
    }
    catch (PDOException $ex)
    {
        die("Failed to run query: " . $ex->getMessage());
    }
    $row = $stmt->fetch();
    if($row) 
    {
        die("Email already in use...");
    }

它抛出的错误:哎呀,运行查询失败:SQLSTATE[23000]:完整性约束违规:1062 Duplicata du champ 'tuskrr@fun.com' pour la clef 'email'

【问题讨论】:

  • 您的查询有误。你需要选择一些东西。一列或*
  • 我已经修复了查询。我不敢相信我错过了。如何避免重复条目?上面的这段代码我只想在管理员更改用户电子邮件时运行。如果没有更改,则跳过。

标签: php html mysql


【解决方案1】:

你需要选择一些东西。您可以执行SELECT 1,因为您只是在检查该行是否存在并且不太关心返回物理数据。

没有邮件就没有结果,有邮件就有结果。

$query_email = "
     SELECT
     1
     from users
     where
     email = :email
";

另一方面,这将如何执行:

if($_POST['email'] !=$_POST['email'])

在什么情况下变量不等于自身?

我无法想象这个逻辑甚至开始运行。您的错误是重复条目,这与您提供的任何代码无关。我的猜测是它会跳过这段代码,而你会直接插入。

也许if(isset($_POST['email'])) 是你想要的?

【讨论】:

  • 我将在此代码之后的下一行直接进行更新查询。如何避免重复条目?
  • 我背后的逻辑!= 是电子邮件地址都是不同的。如果电子邮件被更改,它不再等于它本身,电子邮件就不同了。示例:fun@fun.com 被更改为 fun1@fun.com 它不再等于它自己。
  • 这没有意义,因为在任何时间点都不存在变量不等于自身的实例。 $a=1; if($a!=$a) { /* this will never happen, ever, it's not physically possible */ }一个变量可以不等于另一个变量,但是x总是等于x在数学和逻辑上,你可以改变x是什么,但这不代表x!=x跨度>
  • 您应该将原始电子邮件存储为变量,例如$originalEmail,然后比较$_POST['email'] != $originalEmail
【解决方案2】:

就像 juergen d 在评论中所说,您的查询是错误的。 由于您只想检查电子邮件是否存在,我建议获取电子邮件列而不是全部。

$query_email = "
         SELECT <----- should be SELECT email
         from users
         where
         email = :email";

这样

$query_email = "
     SELECT email
     from users
     where
     email = :email";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2023-03-21
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多