为什么这不起作用以及mysqli_num_rows的错误是什么

时间:2014-05-26 13:10:48

标签: php mysqli

您好,我一直忙于学校项目,我收到错误:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in     
/home/s1073623/domains/navarre.iie.nl/public_html/multimediadesign/inloggen.php on line 20

这是代码:

<?php

ini_set ("display_errors", "On");

session_start();

include("connection.php");

    if(isset($_POST['login'])){
    if(empty($_POST['gebruikersnaam']) || empty($_POST['wachtwoord'])){
        echo "Niet alles is ingevuld!"; }


    else {
        $gebruikersnaam=$_POST['gebruikersnaam'];
        $wachtwoord=md5($_POST['wachtwoord']);
        $sql="SELECT * FROM users WHERE gebruikersnaam=".$gebruikersnaam." AND wachtwoord=".$wachtwoord." "; 
        $result=mysqli_query($connect, $sql); 

        if(mysqli_num_rows($result)==1){    
            echo "Welkom"; 

                $_SESSION['gebruikersnaam']= $gebruikersnaam;
                $_SESSION['wachtwoord']= $wachtwoord;

            echo "Klik <a href=\"admin.php\">hier</a> voor het Dashboard."; 

            exit(); } 

            else { echo "Uw naam of wachtwoord zijn incorrect"; }

        }
    }


?>

有人可以帮助我,这很重要!!

2 个答案:

答案 0 :(得分:0)

您的函数mysqli_num_rows($ result)显示错误,因为错误消息说明了 $ result不是mysqli_result,它是一个布尔值。

唯一的情况是当mysqli_result是一个布尔值时,就是当你生成的$ sql错误时,它返回FALSE(这是一个布尔值)。因此,如果你想调试它,你必须测试你的SQL请求(例如在PHPmyadmin中),并在你的代码工作之后使它工作。

答案 1 :(得分:0)

你应该准备好你的查询,它不仅更安全,而且你也可以避免错误。

在您的代码中,如果此表格中您正在检查的字段为VARCHARs,则需要在这些变量周围添加引号:

$sql="SELECT * FROM users 
      WHERE gebruikersnaam= '$gebruikersnaam' AND wachtwoord='$wachtwoord' "; 

使用预备声明:

$sql="SELECT * FROM users WHERE gebruikersnaam=? AND wachtwoord=? ";

/* create a prepared statement */
if ($result = mysqli_prepare($connect, $sql)) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($result, "ss", $gebruikersnaam, $wachtwoord);

    /* execute query */
    mysqli_stmt_execute($result);

    if(mysqli_num_rows($result)==1){    
        echo "Welkom"; 
        //........