簡體   English   中英

MYSQLI 面向對象,我的腳本有什么問題?

[英]MYSQLI Object oriented, what's wrong with my script?

我正在嘗試執行查詢並查看它是否順利,但現在它沒有輸入 IF 或 ELSE。 我在 mysqli 程序上使用了它,並且現在一切正常,我正在嘗試將其更改為面向對象,並且它不會進入 if/else 內部。

        if(isset($_POST['submit']))
{
    $email = $_POST["email"]; 
    $password = md5($_POST["password"]); 

    $query = "SELECT * FROM Users WHERE Email=? AND Password=?";
    $stmt = $conn->prepare($query);
    $stmt->bind_param('ss', $email,$password);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 1)
    {
            ?>
            <script type="text/javascript">
                alert("INSIDE");
            </script>
        <?php
        $row = $result->fetch_assoc();
        if(isset($_POST['remember']))
        {
            $_SESSION["remember"] = "1"; 
        }
        $_SESSION["username"] = $row['Username'];
        $_SESSION['check'] = "1";
        $_SESSION['ID'] = $id;
        $_SESSION['permission'] = $row['Admin'];
        header("Location: dashboard.php");
        exit;
    } 
    else
    {
        ?>
            <script type="text/javascript">
                alert("Credentials Are Wrong!");
            </script>
        <?php
        exit;
    }
    $stmt->close();
}   

謝謝你們。

你應該使用

$stmt->bind_result($col1, $col2 ...);

$result = $stmt->fetch();

為了從查詢中訪問數據,而不是

$conn->query($stmt);

https://secure.php.net/manual/en/mysqli-stmt.fetch.php提供了一個示例)。 請注意,為此,您需要指定要從數據庫中獲取的列名,而不是在 SQL 查詢中使用 *,並且對於從查詢中獲取的每列數據,您應該有一個變量 in fetch() 參數,例如,以下內容應該可以工作(注意這些可能與您的數據庫列的名稱不匹配):

$email = $_POST["email"]; 
$password = md5($_POST["password"]); 

$stmt = $conn->prepare("SELECT ID, Name FROM Users WHERE Email=? AND Password=?");
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->bind_result($id, $name);
$stmt->fetch();
$stmt->close();
echo $id . ': ' . $name;

更新答案

你很親近。 使用$result = $stmt->get_result(); 而不是$result = $stmt->query; 檢查查詢是否返回結果。

$email = $_POST["email"]; 
$password = md5($_POST["password"]);     

$query = "SELECT * FROM Users WHERE Email = ? AND Password = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$result = $stmt->get_result();

if($result->num_rows !== 0){

  if(isset($_POST['remember'])){
    $_SESSION["remember"] = "1"; 
  }

  $_SESSION['check'] = "1";
  $_SESSION['ID'] = $row['ID'];
  header("Location: dashboard.php");
  exit();

}else{

  echo
  '<script type="text/javascript">
    alert("Credentials Are Wrong!");
  </script>';

  exit();

  }

$stmt->close();

正如一些人在他們的評論中已經聲明的那樣,不要將 MD5 用於密碼哈希。 PHP 有它自己的內置函數來處理密碼。 請研究Password_has()Password_verify() 花時間現在而不是以后研究和實施這些。 它會節省你的時間。

暫無
暫無

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

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