簡體   English   中英

為什么mysqli_real_escape_string()返回NULL?

[英]Why mysqli_real_escape_string() returns NULL?

我正在編寫登錄/注冊頁面。 我想使用mysqli_real_escape_string()保護表單免受sql注入。 如果使用它,該函數將返回NULL

而且我不知道為什么...我搜索后發現,也許我沒有連接到數據庫,但是我可以查詢它。

這是我用來連接數據庫(db.php)的代碼:

<?php
$con = mysqli_connect("localhost","user","pass","database");

// Check connection
if (mysqli_connect_errno())
  {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
?> 

返回NULL的代碼:

include("includes/db.php");
function escapeInput($data) {
    $data = trim($data);
    $data = htmlspecialchars($data);
    $data = stripslashes($data);
    $data = mysqli_real_escape_string($con, $data);
    return $data;
}
if (isset($_SESSION['username'])){
    header("Location: home.php");
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if($_POST['action'] == 'login')
    {
    $username = escapeInput($_POST['username']);
    $password = escapeInput($_POST['password']);
    var_dump($username);
    $password = sha1($password, true);
    $login = "SELECT COUNT(*) FROM users WHERE username = '$username' AND password = '$password'";
    $result = mysqli_query($con,$login);
    $user = mysqli_fetch_array($result, MYSQLI_NUM);
    if($user[0]) {
        echo '<div class="alert alert-success" role="alert">Successfuly logged in.</div>';
        // Store Session Data
        $_SESSION['username'] = $username;  // Initializing Session with value of PHP Variable
        header("Location: home.php");
        die();                    
    }
    else echo '<div class="alert alert-danger" role="alert">Incorrect username and/or password.</div>';
    }
}

現實情況是,如果您現在想對登錄頁面進行編碼,則不應該使用不推薦使用的代碼。 您應該查看PDO。 我跳了起來,一開始聽起來很嚇人,但這是我做過的最好的事情之一。 就這么簡單。

$Qry = $db->prepare("SELECT COUNT(username) FROM users WHERE username = :User AND password = Pass");
$Qry->execute(array(':User'=>$username, ':Pass'=>$password));

那你可以用

$Qry->rowCount();

您必須更改連接字符串,但它更安全且將來更友好

准備的陳述

mysqli_real_escape_string()需要兩個參數:

  1. 連接資源(通過調用mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  2. 一個字符串。

ž mysqli_real_escape_string()總是返回null當第一個參數是null 因此,請確保已創建連接對象,並且尚未使用mysqli_close()關閉它。

嘗試這個:

$data = mysqli_escape_string($con, $data);

您需要將連接對象作為第一個參數傳遞。

暫無
暫無

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

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