PHP登录脚本帮助 - 使用PDO和已发布的变量

时间:2014-03-12 20:32:42

标签: php pdo

好的,首先要做的事情。我试图根据此coding example建立网站。

此示例使用mysql查询而不是PDO查询,因此我尝试将登录(并最终注册)脚本更改为PDO。我有一个用示例用户名和密码编写的数据库来测试脚本。但是,我的查询总是返回false。我不确定我是否正确处理传递的变量。我知道我很好地连接到数据库。这是我的代码,它给了我一些问题。这会在页面检查后直接获取,以确保已成功输入用户名和密码。

if(!count($err))
{
    $_POST['username'] = $con->quote($_POST['username']);
    $_POST['password'] = $con->quote($_POST['password']);
    $_POST['rememberMe'] = (int)$_POST['rememberMe'];

    $username=$_POST['username'];
    $password=md5($_POST['password']);
    // Escaping all input data

            //$loginquery = $con->prepare("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='{".md5($_POST['password'])."'");
            //$myquery = $con->query($loginquery);

            $loginquery = $con->prepare("Select id,usr FROM tz_members WHERE usr=:username AND pass=:password");
    $loginquery->execute(array(':username'=>$username, 'password'=>$password));

    $row = $loginquery->fetchAll();

    if($row['usr'])
    {
        // If everything is OK login

        $_SESSION['usr']=$row['usr'];
        $_SESSION['id'] = $row['id'];
        $_SESSION['rememberMe'] = $_POST['rememberMe'];

        // Store some data in the session

        setcookie('tzRemember',$_POST['rememberMe']);
    }
    else $err[]='Wrong username and/or password!';
    //else $err[]= print_r($row['usr']);

我注释掉了一些代码,以便我可以尝试不同的东西。我添加了最后一行,以便(希望)显示我的查询返回的内容。它返回的全部是" 1",这是我的测试用户名和密码所在的行的ID号。我不确定这是不是巧合。就是这样,我没有收到任何更多的错误。我只是收到"错误的用户名和/或密码!"信息。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

使用占位符时,您可以 NOT 引用/转义数据。数据库系统将为您解决这个问题。因为您已经手动向数据添加了转义,所以这些转义本身会被数据库作为查询系统的一部分进行转义,并且您不会插入与提供的内容不同的内容:

$loginquery->execute(array(':username'=>$_POST['username'], ':password'=> $_POST['password']));

确实是你需要做的。并注意密码参数上的:。你的版本中缺少它。将占位符:值对传递给`exec()。

时,必须存在:

答案 1 :(得分:0)

fetchAll()不会返回您的想法。 始终阅读手册中的功能说明。然后选择更合适的方法。

https://stackoverflow.com/tags/pdo/info也有帮助

答案 2 :(得分:-1)

 $loginquery->execute(array(':username'=>$username, 'password'=>$password));

删除参数上的