Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysqli准备的stmt;如果;条件为“||&引用;及&&&引用;操作人员_Php_Mysql_Mysqli - Fatal编程技术网

Php 使用mysqli准备的stmt;如果;条件为“||&引用;及&&&引用;操作人员

Php 使用mysqli准备的stmt;如果;条件为“||&引用;及&&&引用;操作人员,php,mysql,mysqli,Php,Mysql,Mysqli,我正在学习mysqli编写的语句,现在我遇到了一个问题,无法找到解决办法。这是注册表格,包含“用户名”、“电子邮件”和“密码”。如果数据库中已经存在用户名和电子邮件,则不允许注册。我使用了post方法,代码如下: //validating email if(!filter_var($user_email, FILTER_VALIDATE_EMAIL) === true) { echo "invalid email"; exit(); } //valid email else{

我正在学习mysqli编写的语句,现在我遇到了一个问题,无法找到解决办法。这是注册表格,包含“用户名”、“电子邮件”和“密码”。如果数据库中已经存在用户名和电子邮件,则不允许注册。我使用了post方法,代码如下:

//validating email
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL) === true) {
    echo "invalid email";
    exit();
}
//valid email
else{
    //prepared query
    $query_name = "SELECT * FROM users WHERE user_name = ?";
    $query_email = "SELECT * FROM users WHERE user_email = ?";

    //prepared statements
    $stmt_name = mysqli_prepare($conn, $query_name);
    $stmt_email = mysqli_prepare($conn, $query_email);

    //if bind failure
    if((!mysqli_stmt_bind_param($stmt_name, "s", $user_name)) && (!mysqli_stmt_bind_param($stmt_email, "s", $user_email))){
         echo "bind unsuccessfull";
         exit();
           }
          else{
             //if execution fails
               if( !mysqli_stmt_execute($stmt_name) && !mysqli_stmt_execute($stmt_email)){
                   echo "stmt execution failed";
                   exit();

               }
               //else if execution success
               else{

                    $result_name = mysqli_stmt_store_result($stmt_name);
                    $result_email = mysqli_stmt_store_result($stmt_email);
                    //rows
                    $row_name = mysqli_stmt_num_rows($stmt_name);
                    $row_email = mysqli_stmt_num_rows($stmt_email);
                    echo $row_name;
                    echo $row_email;
               }
         }

}
如果条件起作用,那么它看起来像
和&
之前的第一部分,而第二部分根本不起作用。我已尝试将其注册到数据库中现有的“电子邮件”,但结果仍然为0。 连接良好,工作正常!
如果您有任何帮助,我们将不胜感激>

与其编写这么多复杂的代码,不如使用单个查询来完成您的工作

//validating email
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL) === true) {
    echo "invalid email";
    exit();
}
else{

    $stmt = mysqli_prepare($conn, "SELECT * FROM users WHERE user_name = ? OR user_email = ?");
    mysqli_stmt_bind_param($stmt, 'ss', $user_name, $user_email);

   if( !mysqli_stmt_execute($stmt)){
       echo "stmt execution failed";
       exit();

   }else{

        $result_name = mysqli_stmt_store_result($stmt_name);
        $result_email = mysqli_stmt_store_result($stmt_email);
        //rows
        $row_name = mysqli_stmt_num_rows($stmt_name);
        $row_email = mysqli_stmt_num_rows($stmt_email);
        echo $row_name;
        echo $row_email;
   }
}
$query_name=“从user_name=?或user_email=?”的用户中选择*;
您不需要同时检查两次条件。如果有人通过电子邮件或用户名登录,则此查询将同时检查用户名和电子邮件。

我会尝试使用
条件以及
try/catch
块将这两个查询一起滚动,以便您可以在某些情况下抛出异常如果不满足某个条件,则分阶段执行

if( !isset( $user_email ) or !filter_var( $user_email, FILTER_VALIDATE_EMAIL ) === true ) {

    exit("invalid email");

} else {
    try{
        if( isset( $user_name, $user_email ) ){

            $sql='select `user_name`,`user_email` from `users` where `user_name` = ? or  user_email = ?'
            $stmt=$conn->prepare( $sql );

            if( $stmt ){

                $stmt->bind_param('ss', $user_name, $user_email );
                $result=$stmt->execute();

                if( $result ){

                    $stmt->store_result();

                    if( $stmt->num_rows == 1 ){
                        /* user name &/or email already exists */
                        $stmt->bind_result( $name, $email );
                        $stmt->fetch();

                        printf('whoohoo! - found user "%s" with email "%s"', $name, $email );

                    } else {
                        /* no record for username or email*/

                        /* sql query to insert new user */

                    }
                    $stmt->free_result();
                    $stmt->close();

                } else {
                    throw new Exception('sql query failed to return any results');
                }
            } else {
                throw new Exception('unable to prepare sql');
            }
        } else {
            throw new Exception('username &/or email are missing');
        }
    }catch( Exception $e ){
        echo $e->getMessage();
    }

您可以从user\u name=?或user\u email=?的用户处进行类似于
$query\u name=“SELECT*”的单个查询&
更改为
| |
,您需要两个条件都失败。其中一条语句可能失败,只是继续执行脚本。2) 你想让多个名字相同的人在你的网站上注册吗?因为您现在所做的只允许使用一个不同的名字。是的,我只想要一个不同的名字,而且我想知道我们是否可以在
if
条件下使用两个准备好的语句。@AlivetoDie yes,谢谢,我确实检查了你的答案,它是这样工作的,但我想知道是只有
user\u name
匹配还是只有
user\u email
匹配,还是两者都匹配。因此,我创建了两个查询。@Orzoon它将处理每个条件,如用户名匹配或emil匹配或两者都匹配。实际上,它是一个注册表,所以我想知道是否只有“用户名”匹配或是否只有“电子邮件”匹配或两者都匹配。因此,我使用了两个不同的查询。通过使用我的查询,您可以同时检查这两个查询。在这种情况下,您可以匹配用户名和电子邮件进行登录。