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 に答える