[英]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()
需要兩個參數:
mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
ž mysqli_real_escape_string()
總是返回null
當第一個參數是null
。 因此,請確保已創建連接對象,並且尚未使用mysqli_close()
關閉它。
嘗試這個:
$data = mysqli_escape_string($con, $data);
您需要將連接對象作為第一個參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.