我尝试从头开始制作这个简单的代码,所以我觉得我在这里遗漏了一些东西,因为我收到错误并且不知道为什么。
我试图登录用户。该脚本查看数据库,如果它找到了结果(只有一个用户),它会为该用户设置一个会话。
这是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} } ...
答案 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()
中,这可能会导致您看到的错误。
所以:
resultset
移至执行结束boolean false
或{{1}}。