У меня есть страница входа ( login.php
), а ниже – код, который я пытаюсь использовать для аутентификации пользователя с помощью mysqli_prepare
:
if(!$_POST["username"] || !$_POST["password"]) { echo "Username and Password fields are mandatory."; } else { $unsafe_username = $_POST["username"]; $unsafe_password = md5($_POST["password"]); $query=mysqli_prepare($con, "select user_id from users where user_name= ? and password= ? "); $query->bind_param("ss", $unsafe_username, $unsafe_password); $query->execute(); $data = $query->get_result(); if(is_array($data)) { echo "Login successful"; } else { echo "Login failed"; } }
Ниже приведен код, используемый для подключения MYSQL:
function connect_database() { $con = mysqli_connect("servername", "username", "", "dbname"); if (!$con) { $con = ""; echo("Database connection failed: " . mysqli_connect_error()); } return $con; }
Используя mysqli_prepare
, я получаю следующие предупреждения и сообщения об ошибках:
Warning: mysqli_prepare() expects exactly 2 parameters, 1 given Fatal error: Call to a member function bindParam() on null
Я задал подобный вопрос два дня назад, но не получил никакого полного решения. ( Предотвратите внедрение SQL на страницу входа в PHP и MySQL ).
Пожалуйста, помогите мне в решении проблемы. Является ли это лучшим подходом к предотвращению моего DB от SQL Injection?
отсутствует переменная соединения $con
$query=mysqli_prepare($con,"select user_id from users where user_name= ? and password= ? ");
и изменить это тоже
$query->bind_Param("ss", $unsafe_username, $unsafe_password); ^^^
Вы должны добавить переменную $con
в функцию подготовки
$query=mysqli_prepare($con,"SELECT user_id FROM users WHERE user_name= ? AND password= ? ");
Процедурный стиль mysqli_prepare
ожидает, что первым параметром будет переменная соединения, а вторая – строка (запрос).
+ Изменить
mysqli_prepare("select user_id from users where user_name= ? and password= ? ");
в
mysqli_prepare($conn, "select user_id from users where user_name= ? and password= ? ");
Прочитайте документацию здесь .