2016-04-14 160 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

相关问题