1

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

2 回答 2

1

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

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

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

稍后您将使用一个$user未定义的变量。

包含什么$data

于 2012-07-06T22:17:21.103 回答
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;
} 
?>
于 2012-07-06T22:25:51.227 回答