Почему mysqli_real_escape_string () возвращает NULL?

Я кодирую страницу входа / регистрации.
Я хочу защитить форму от инъекций SQL, используя mysqli_real_escape_string(),
Если я использую его, функция возвращает 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>';
}
}

-1

Решение

Реальность такова, что если вы хотите закодировать страницу входа в эти дни, вы не должны использовать устаревший код. Вы должны заглянуть в PDO. Я сделал прыжок, и поначалу это звучало страшно, но это была одна из лучших вещей, которые я когда-либо делал. Это так просто.

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

Тогда вы можете использовать

$Qry->rowCount();

Вам придется изменить строку подключения, но она намного безопаснее и удобнее для будущего

Подготовленные заявления

0

Другие решения

Попробуй это:

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

Вам необходимо передать ваш объект подключения в качестве первого параметра.

0

mysqli_real_escape_string() требуется два параметра:

  1. Ресурс соединения (создается путем вызова mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);)
  2. Строка.

Zmysqli_real_escape_string() всегда возвращается null когда первый параметр null, Поэтому убедитесь, что вы создали объект подключения и еще не закрыли его mysqli_close(),

0
По вопросам рекламы [email protected]