当我点击登录按钮时,我将简单的SQL查询更改为pdo.now我收到此错误:
未定义的变量:第16行的/var/www/login.php中的行 注意:未定义的变量:第17行的/var/www/login.php结果 警告:mysql_num_rows()期望参数1为资源,在第17行的/var/www/login.php中给出null。您的登录名或密码无效
代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors','5');
include("conn.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from Form
$u_name=addslashes($_POST['username']);
$password=addslashes($_POST['password']);
$sql="SELECT id FROM admin WHERE username='$u_name' and password='$password'";
$q = $conn->query($sql) or die("failed!");
$r = $q->fetch(PDO::FETCH_ASSOC);
$active=$row['active'];
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1)
{
session_register("u_name");
$_SESSION['login_user']=$u_name;
header("location: main.php");
}
else
{
echo ("Your Login Name or Password is invalid");
}
}
?>
答案 0 :(得分:2)
mysql_num_rows
是一个功能,它是已弃用的 mysql_*
扩展程序的一部分。只需查看PDO手册here,看看如何使用PDO获取num-rows。你只是不能一起使用PDO和mysql(i)_*
一起使用
您的代码中有许多其他问题,包括查询本身:SELECT id FROM
将返回一个结果集,其中每行只有一列,称为ID,但您继续访问{{1在你的代码中。这将发出通知,因为无法找到索引
更改查询以选择您实际需要的所有字段$row['active'];
是最低要求,具体取决于您的代码。
除此之外,就变量名称而言,你也是非常不一致的。您呼叫SELECT id, active FROM...
的内容会更改为$r
下一行......当然,这会导致$row
通知。
您还有一个非常重要的注入漏洞,以下是我查询您的数据的方式:
undefined variable
那就是说,你真的应该学习预备语句和 哈希你的密码
答案 1 :(得分:1)
$r = $q->fetch(PDO::FETCH_ASSOC);
应为$row = $q->fetch(PDO::FETCH_ASSOC);
此外,不推荐使用session_register()
函数。你不应该使用它。