使用PDO扩展程序的登录脚本不起作用

时间:2012-07-06 21:55:50

标签: php pdo

我不确定我是否正确地进行了操作但是我刚开始使用PDO而且我无法让我的代码工作。我继续收到错误“抱歉无法连接”,我无法弄清楚出了什么问题。

下面是我正在使用的代码:

function doRun( $data )  
    { 
        try 
        {
            $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                $stmt = $db->prepare('  SELECT 
                                                username, pass 
                                        FROM    
                                                testTable
                                        WHERE
                                                username = :name
                                        AND     
                                                pass = :pass

                                    ');

                $stmt->bindParam(':name', $username, PDO::PARAM_STR);
                $stmt->bindParam(':pass', $pass, PDO::PARAM_STR);

                $stmt->execute();

                //$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
                $result = $stmt->fetchColumn();

                if($result == false)
                {
                    echo 'sorry could not connect';
                }
                else
                {
                    $_SESSION['username'] = $user;

                    echo 'logged in as' . $user;
                }

        } 
        catch (PDOException $e) 
        {
            echo "throw";
        }

        $db = NULL;
    } 

2 个答案:

答案 0 :(得分:1)

这会给你0行,因为$username$pass似乎没有定义:

  $stmt->bindParam(':name', $username, PDO::PARAM_STR);
  $stmt->bindParam(':pass', $pass, PDO::PARAM_STR);
                            ^^^^^^^^^

您可能希望将$data变量中的某些元素作为用户名和密码提供给该函数。

稍后您使用的变量$user也是未定义的。

$data包含哪些内容?

答案 1 :(得分:1)

您“无法连接”的原因,即使您正在连接但未找到匹配项,原因是您的用户变量未定义。

尝试以下解决方案:

<?php

function doRun( $data )  
{ 
    $msg = '';
    $username = isset($_POST['name']);
    $pass = isset($_POST['pass']);

    try 
    {
        $db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $db->prepare('
            select
                username
                ,pass 
            from   
                testTable
            where
                username = :name
                and pass = :pass
        ');
        $stmt->execute(array(':name' => $username, ':pass' => $pass);
        $result = $stmt->fetchAll();

        if(!empty($result)){
            $_SESSION['username'] = $user;
            $msg = "logged in as $user";        
        }else{
            $msg = "Unable to connect";
        }

    } catch (PDOException $e) {
        echo "Error: $e";
    }

    echo $msg

    $db = NULL;
} 
?>