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


Login script using PDO extension not working

>我不确定我是否正确,但我刚刚开始使用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;
    } 
这会

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

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

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

稍后,您将使用未定义的变量$user

$data包含什么?

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

请尝试以下解决方案:

<?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;
} 
?>