检查数据库中是否存在两个值,并通过一次咨询返回哪一个或两者

时间:2013-11-16 17:08:28

标签: php pdo

我正在尝试检查数据库中是否存在用户名或电子邮件,并将数据返回给用户,说明电子邮件或用户名是否已在使用中,有任何方法可以执行此操作而无需与数据库? 现在我有这个↓但是我不确定它是对的。

 <?php
    if (isset($_POST['sub'])){
     require_once 'conexio.php';
     $pdo = new Conexio(); 
     $pdo->exec("set names utf8");

     $dbTabla="usuaris";
     $contra = $_POST["contra"];

     $consulta=$pdo->prepare("SELECT username,email FROM $dbTabla WHERE username=? OR email=?");
     $consulta->execute(array($_POST['username'],$_POST['email']));
     $result = $consulta->fetchObject();
     if($consulta->rowCount()>0){


     if("what to put in here?"){

      echo "That username it's already in use";

     }

     if("what to put in here?"){

      echo "That e-mail it's already in use";

     }
                             }



   }

   ?> 

由于

2 个答案:

答案 0 :(得分:2)

您当前查询的“问题”(以及Chinnu建议的解决方案)是它可能最多返回两行(一个匹配用户名,另一个匹配电子邮件),您可能必须迭代,这可能是有点烦人。

您可以使用BIT_OR聚合函数获得单行结果:

$consulta=$pdo->prepare("SELECT BIT_OR(username = ?) AS username_exists, " .
                        "BIT_OR(email = ?) AS email_exists " . 
                        "FROM $dbTabla " .
                        "WHERE username=? OR email=?");
$consulta->execute(array($_POST['username'], $_POST['email'],$_POST['username'], $_POST['email']));

现在,您有一行可以轻松评估的真/假表达式:

if($result->username_exists) {
    echo "That username is already in use";
}

if($result->email_exists) {
    echo "That e-mail is already in use";
}

答案 1 :(得分:0)

你能试试吗,

    $result = $consulta->fetchObject();

    if($result->username==$_POST['username']){
            echo "That username it's already in use";
    }

    if($result->email==$_POST['email']){
        echo "That e-mail it's already in use";
    }