使用pdo连接数据库时出错

时间:2014-01-28 10:09:50

标签: php

当我点击登录按钮时,我将简单的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");
        }
}
?>

2 个答案:

答案 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()函数。你不应该使用它。