2

さて、私は頭をPDOに取り込もうとしています。これまでのところ、私はそれが大好きです!:)しかし、私は何かに遭遇したばかりで、それを完全に理解することはできません.

したがって、以下のコードを検討してください。トレース エコーをコード内に配置すると、キャッチ エコー内に何も表示されません。したがって、そこにはエラーはありません(またはそう思います)。execute() の直後に $success をエコーすると、TRUE が返されます。したがって、$success の条件内でトレースしようとすると、$userData または直接 $userID を出力しようとしても何も返されません。しかし、hello world のエコーを入れると、印刷されます。

デバッグする次のステップは何ですか? SQL ステートメントに問題があった場合、それもキャッチされて表示されるのではないかと思います。

try 
  { 
     $dbh = DatabaseHelpers::getDatabaseConnection(); 

     $stmt = $dbh->prepare('SELECT UserId FROM Users WHERE ' 
             . 'Username=:Username ' 
             . 'AND Password=:hashedPassword ' 
             . 'LIMIT 1'); 

     $hashedPassword = DatabaseHelpers::passHash ($password); 

     $stmt->bindParam(':Username', $Usernname, PDO::PARAM_STR); 
     $stmt->bindParam(':hashedPassword', $hashedPassword, PDO::PARAM_STR); 

     $success = $stmt->execute(); 

     if ($success) 
     { 
        $userData = $stmt->fetch(); 
        $userID = $userData['UserId']; 
     } 

     $dbh = null; 
  } 
  catch (PDOException $e) 
  { 
     $e
  } 
4

1 に答える 1

3

ここにタイプミスがあると思います: $Usernnameshould be $Username.

この行で:

$stmt->bindParam(':Username', $Usernname, PDO::PARAM_STR);

そのため、何も返されない可能性があります。検索するユーザー名は、基本的に空の文字列になります。

于 2012-11-23T15:06:04.930 に答える