为什么我收到mysqli_num_rows()错误?我已按照文档中的示例进行操作

时间:2014-07-26 18:46:04

标签: php mysql mysqli

我尝试从头开始制作这个简单的代码,所以我觉得我在这里遗漏了一些东西,因为我收到错误并且不知道为什么。

我试图登录用户。该脚本查看数据库,如果它找到了结果(只有一个用户),它会为该用户设置一个会话。

这是login.php中的HTML日志:

<form name="loguearse" action="" method="POST">
Usuario: <input type="text" name="usuario"> 
Clave: <input type="text" name="clave">
<input name="recordar" type="checkbox" value="1"/> recordar datos
<input type="submit" name="submit" value="Entrar!"> <a href="salir.php">Salir</a>
<br>
</form>

这是处理会话的php代码。它位于同一个文件中,位于html代码正下方:

<?php
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $conexion=mysqli_connect('localhost','user','pass','db')
        OR die('Oops! Error '.mysqli_connect_errno());

        $consulta='  SELECT * FROM usuario 
            WHERE username="'.$_POST['usuario'].'" 
            AND pass="'.$_POST['clave'].'"
            ';

        $resultado=mysqli_query($conexion,$consulta);

        mysqli_close($conexion);

        $rows = mysqli_num_rows($resultado);
        if ($rows) {

            $usuarioLogueado=$_SESSION['usuario'];

            if ($_POST['recordar']) {
                setcookie ("usuario",$usuarioLogueado, time()+24*60*60*30);
                setcookie ("clave",$clave, time()+24*60*60*30);
            } else {
                setcookie("usuario","");
                setcookie("clave","");
            }       
        }

        if (isset($usuarioLogueado)) {
            echo 'Hola '.$usuarioLogueado. ' Session Id: '.session_id();
        } else echo 'Nada'; 
    }

我总是得到&#34; Nada&#34;。

这就是我设置usuario表的方式:

create table if not exists usuario (
    uid int unsigned not null auto_increment primary key,
    username char(20) not null,
    pass char(20) not null,
    name char(200) not null,
    email char(200) not null
);

这是我在日志中得到的错误:

[:error] [pid 2727] [client 127.0.0.1:44577] PHP Warning:  mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/demo/login.php on line 42, referer: http://localhost/demo/index.php

如果有人对index.php感到奇怪(因为错误说的话):

<?php
session_start();
include 'login.php';

我知道可能还有很多其他错误,这些只是我编程的第一步,但我无法理解为什么mysqli_num_rows()给了我一个错误,我已经构建了它{{3} } ...

1 个答案:

答案 0 :(得分:1)

您在致电mysql connection之前关闭了mysqli_num_rows(),这是不可取的。我一开始以为这就是问题所在。但是我意识到您在执行查询后关闭了连接。

$resultado=mysqli_query($conexion,$consulta);
mysqli_close($conexion);

当连接关闭时,它还会释放在该连接处于活动状态时创建的所有先前resources/objects。有了这个假设,我认为当你到达时$resultado已经garbage collected

$rows = mysqli_num_rows($resultado);

但是,当变量为garbage collected/unsetted时,其值不应更改为boolean true or false。这让我想知道您的SQL是否存在错误。

$resultado=mysqli_query($conexion,$consulta); - 如果此调用失败,则mysqli_query()将返回boolean false,该$resultado将存储在mysqli_close()中,这可能会导致您看到的错误。

所以:

  1. resultset移至执行结束
  2. 如果不能解决问题,请检查查询是否返回boolean false或{{1}}。