【问题标题】:PHP + MySql, OR query with multiple error checksPHP + MySql,或带有多个错误检查的查询
【发布时间】:2013-09-04 23:12:47
【问题描述】:

目前我必须使用 2 个查询来检查数据库是否已经包含电子邮件或 ip。

我现在的代码:

        $link = $db->prepare("SELECT * FROM users WHERE email=?");
        if($link->execute(array($login))){
            if($link->rowCount() > 0){
                $errmsg_arr[] = 'Email is already in use';
                $errflag = true;
            }
        }

        $link = $db->prepare("SELECT * FROM users WHERE Ip=?");
        if($link->execute(array($ip))){
            if($link->rowCount() > 0){
                $errmsg_arr[] = 'There is allready account registered with this IP address';
                $errflag = true;
            }
        }

如果我使用此查询,是否有办法检查电子邮件或 IP 是否已使用以及如何检查?

$link = $db->prepare("SELECT * FROM users WHERE email=? OR Ip=?");

编辑:明确地说,我想给出 2 个不同的错误,而不是告诉用户“电子邮件或 IP 已在使用中”

    if($link->execute(array($login, $ip))){
        // WHAT HERE?
        // CHECK IF EMAIL IS ON USE
        $errmsg_arr[] = 'Email is already in use';

        //CHECK IF IP IS USED
        $errmsg_arr[] = 'There is allready account registered with this IP address';

        $errflag = true;
    }

那么,这可能只需要 1 个查询吗?

我想尽量减少查询的使用。

谢谢

【问题讨论】:

  • 您是否尝试过使用OR 声明发布的内容?因为这对我来说很合适。
  • 把账号锁定到ips不是个好主意,上千人可以用同一个IP
  • 也拼写为already ;p

标签: php mysql sql pdo


【解决方案1】:

试试这个:(并且由于您使用 prepare() 并执行,请阅读here):

$link = $db->prepare("SELECT * FROM users WHERE email=? OR Ip=?");
if($link->execute(array($email, $ip))){
        if($link->rowCount() > 0){
            $errmsg_arr[] = 'Email or IP is already in use';
            $errflag = true;
        }
    }

【讨论】:

  • 嘿,我想给出 2 个不同的错误,而不是“电子邮件或 IP 已在使用中”。这可以通过 1 个查询来完成吗?
  • 然后您可以将查询 ($link->execute()) 给出的结果与变量 $email、$ip 进行比较,并手动设置错误 $messages。就这么简单。
  • 你为什么链接到PEAR::DB? OP 正在使用 PDO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多