2016-04-14 199 views
-3

因此,我正在處理一個簡單的登錄腳本,並遇到了一個問題,我得到了這個錯誤。警告:mysqli_num_rows()期望參數1是mysqli_result

<?php 
 
require_once './php/db_connect.php'; 
 
?> 
 

 
<?php 
 
$username=""; 
 
$password=""; 
 
// username and password sent from form 
 
$myusername=$_POST['myusername']; 
 
$mypassword=$_POST['mypassword']; 
 

 

 
$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
 
$result=$db->query($sql); 
 

 
// Mysql_num_row is counting table row 
 
$count=mysqli_num_rows($result); 
 

 
// If result matched $myusername and $mypassword, table row must be 1 row 
 
if($count==1){ 
 

 
// Register $myusername, $mypassword and redirect to file "login_success.php" 
 
session_register("myusername"); 
 
session_register("mypassword"); 
 
header("location:login_success.php"); 
 
} 
 
else { 
 
echo "Wrong Username or Password"; 
 
} 
 
?>

,但我似乎無法能夠解決它。我想我可能需要改變我如何從SELECT中查詢,但不太確定如何。

+0

您正在混合面向過程數據庫連接的面向對象。 – Martin

+0

您的代碼* *開放** * SQL注入**。您應該查看使用準備好的語句的查詢參數。 – David

+1

但@David,我的密碼真的是''或'1'='1' –

回答

0

您正在混合面向過程數據庫連接的面向對象。

如果read the manual,你會看到,面向對象的方法,你應該使用:

INT $ mysqli_result-> NUM_ROWS;

所以

$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
$result=$db->query($sql); 

// Mysql_num_row is counting table row 
$count= $result->num_rows; 
-1
$sql="SELECT * FROM logins WHERE username='$myusername' and password='$mypassword'"; 
$result=$db->query($sql); 

在這裏,你的查詢由於某種原因失敗,並返回一個布爾FALSE,不是mysqli_result一個實例。

您應該在此處理錯誤,而不是將它傳遞給mysqli_num_row

+0

謹慎解釋downvote? – Quassnoi

+0

這不是我的失望,但你的回答並不回答OP提出的問題,這就是爲什麼他們的'mysqli_num_rows'不能將'$ result'中的變量內容識別爲MySQL資產。 – Martin

+0

@Martin:是的。 'php -r'$ m = new mysqli(NULL,NULL,NULL,「test」); $ r = $ m-> query(「SELECT 1」); echo mysqli_num_rows($ r)。「\ n」;'' - 對我來說工作正常。只是'query'在失敗時返回一個布爾值。 – Quassnoi

相關問題