2014-02-04 15 views
1

Я пробовал преобразовать кусок кода из 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/>'; 
} 

} 
?>  
+1

MD5 не является безопасным. Вам нужен итерированный соленый хеш, такой как bcrypt. – SLaks

+0

Прочтите эту ошибку. Также вы написали '$ resuult' – rybo111

+0

изменили переменную на $ result, без изменений – user2320010

ответ

2

Приведенный ниже код не работает, я представляется с ошибкой «Внимание: mysqli_num_rows() ожидает, что именно 1 параметр, 2 дано». Я знаю, что есть проблема с запросом, однако мне трудно понять это.

Нет, это не проблема с запросом, прочитать сообщение об ошибке с указанием:

"Предупреждение: mysqli_num_rows() ожидает, что именно 1 параметр, 2 дано"

Гугле mysqli_num_rows >>Documentation

Требуется один параметр; mysqli_result

Так называют его с этим одним параметром, либо использовать один из примеров в документации:

mysqli_num_rows($result);

+0

Отказ от ответственности: я не знаю PHP – Philipp

+0

Спасибо, я изменил его, и он перенаправляет страницу, как ожидалось. – user2320010