Я пробовал преобразовать кусок кода из mysql в mysqli, код ниже - это код mysql, это прекрасно работает и позволяет пользователю правильно войти.mysql code vs mysqli code
<?php
if($_POST){
$username=mysql_real_escape_string($_POST['username']); //Protects against SQL Injection
$password=mysql_real_escape_string($_POST['password']); // Protects against SQL Injection
$sql = mysql_query("SELECT * FROM usertable WHERE userID ='".$username."' AND userPass ='".md5($password)."'") or die(mysql_error());
$res=mysql_num_rows($sql);
if($res>0){
$rs_login=mysql_fetch_assoc($sql);
$uid=$rs_login['userID'];
$_SESSION['sess_uid']=$uid;
header("Location: index.php");
die();
}
else{
echo '<div class="error">Incorrect Username or Password</div>';
echo '<br/>';
}
}
?>
Приведенный ниже код не работает, я представляется с ошибкой «Внимание: mysqli_num_rows() ожидает, что именно 1 параметр, 2 дано». Я знаю, что есть проблема с запросом, однако мне трудно понять это.
<?php
$mysqli = mysqli_connect("localhost", "root", "password", "dbname") or die ('Could not connect to database!');
if(isset($_POST['username']) && isset($_POST['password'])){
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, md5($_POST['password']));
$sqllogin = "SELECT * FROM usertable WHERE userID = '".$username."' AND userPass = '".$password."' LIMIT 1" ;
$result = mysqli_query($mysqli,$sqllogin);
$count = mysqli_num_rows($mysqli,$result);
if (!$resuult) {
die(mysqli_error($mysqli));
}
if ($count > 0) {
$data = mysqli_fetch_assoc($count);
return $data;
$uid=$rs_login['userID'];
$_SESSION['sess_uid']=$uid;
header('Location: index.php');
} else {
echo '<div class="error">Incorrect Username or Password</div>';
echo '<br/>';
}
}
?>
MD5 не является безопасным. Вам нужен итерированный соленый хеш, такой как bcrypt. – SLaks
Прочтите эту ошибку. Также вы написали '$ resuult' – rybo111
изменили переменную на $ result, без изменений – user2320010