簡體   English   中英

如何同時使用 SQL COUNT 和 mysqli_stmt_num_rows?

[英]How Can You Use Both SQL COUNT And mysqli_stmt_num_rows At The Same Time?

我正在嘗試構建一個 php 腳本,您可以在其中將您的 email 地址提供給它。 如果 email 地址在 mysql db 中不存在,則 register() function 應該觸發。 否則 login() function。 現在,無論我輸入什么 email 地址,無論是 db 中存在還是不存在,我總是得到 register() 觸發。 這是為什么?

這是基本代碼。 我沒有給出 regsiter() 或 login() 代碼,因為此時它們無關緊要。

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!isset($_POST['email_account']) || !isset($_POST['email_service']))
{
    $email_error = "<font color='red'>Input Email Address!</color>";
}
else
{
    echo "Line 13 triggered<br>"; //DELETE THIS

    $conn = mysqli_connect("localhost","root","","test");

    if($conn === false)
    {
        die("ERROR: Connection Error!. " . mysqli_connect_error());
    }
    else
    {
        echo "Line 24 triggered<br>"; //DELETE THIS
        //Set Parameters.
        $email = trim($_POST["email_account"]) . '@' . trim($_POST["email_service"]);
        echo "line 27 triggered: $email<br>";

        $sql_query = "SELECT COUNT(personal_email) FROM users WHERE personal_email = ?";
        $stmt = mysqli_prepare($conn,$sql_query);
        if($stmt == false) 
        {
          // just for debugging for now:
          die("<pre>Prepare failed:\n".mysqli_error($conn)."\n$sql_query</pre>");
        }
        else
        {
            echo "Line 38 triggered<br>"; //DELETE THIS
            mysqli_stmt_bind_param($stmt,'s',$email);

            if(!mysqli_stmt_execute($stmt))
            {
                echo "Line 43 triggered<br>"; //DELETE THIS
                //Close Connection.
                mysqli_close($conn);

                die("Could not mysqli_stmt_execute! Please try again later!");
            }

            echo "Line 50 triggered<br>"; //DELETE THIS
            //if($sql_query == 1)
            if(mysqli_stmt_num_rows($stmt) == 1)
            {
                echo "Line 57 triggered: Function login() will trigger!<br>"; //DELETE THIS
                $_SESSION['session_type'] = 'login';
                login();

            }
            else
            {
                echo "Line 64 triggered: Function register() will trigger!<br>"; //DELETE THIS
                $_SESSION['session_type'] = 'register';
                register();
            }
        }
    }
}
}

我得到了你在星號中看到的以下內容的回應:

  • 第 13 行觸發
  • 第 24 行觸發
  • 第 27 行觸發:realemail@gmail.com
  • 第 38 行觸發
  • 第 53 行觸發
  • 第 64 行觸發:Function register() 將觸發!

如果可以同時使用 SQL COUNT 和 php 的mysqli_stmt_num_rows($stmt) ,那么請有人告訴我該怎么做。 但如果不是這樣,請給我看兩個例子。 一個是 Sql COUNT,一個是 php 的mysqli_stmt_num_rows($stmt) function。

注意:我實際上想學習如何使用 Sql 的 COUNT 來計算行數。 如果 COUNT = 0,則 register()。 否則,如果 COUNT = 1,則 login()。 這里我們計算 mysql 數據庫中 email 地址的存在。

你根本不需要mysqli_stmt_num_rows() 您已經獲取了COUNT() ,所以只需在 PHP 中使用該結果。 mysqli_stmt_num_rows()每次都會給你 1。 它是 MySQL 返回的行數,您總是要求一行包含 MySQL 中匹配記錄的計數。

我從您的腳本中刪除了所有錯誤的 mysqli 代碼並添加了get_result() 我留下了 rest 原樣。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!isset($_POST['email_account']) || !isset($_POST['email_service'])) {
        $email_error = "<font color='red'>Input Email Address!</color>";
    } else {
        echo "Line 13 triggered<br>"; //DELETE THIS

        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $conn = mysqli_connect("localhost", "root", "", "test");
        $conn->set_charset('utf8mb4'); // always set the charset

        echo "Line 24 triggered<br>"; //DELETE THIS
        //Set Parameters.
        $email = trim($_POST["email_account"]) . '@' . trim($_POST["email_service"]);
        echo "line 27 triggered: $email<br>";

        $sql_query = "SELECT COUNT(personal_email) FROM users WHERE personal_email = ?";
        $stmt = $conn->prepare($sql_query);

        echo "Line 38 triggered<br>"; //DELETE THIS
        $stmt->bind_param('s', $email);

        $stmt->execute();

        $result = $stmt->get_result();

        echo "Line 50 triggered<br>"; //DELETE THIS
        if ($result->fetch_array()[0]) {
            echo "Line 57 triggered: Function login() will trigger!<br>"; //DELETE THIS
            $_SESSION['session_type'] = 'login';
            login();
        } else {
            echo "Line 64 triggered: Function register() will trigger!<br>"; //DELETE THIS
            $_SESSION['session_type'] = 'register';
            register();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM