0

PDO を使用して Web サイトにログイン セクションを作成しようとしています。

これまでのところ、私は次のことをしています...

config.php

    // Connect to DB
    $username = 'user@site.co.uk';
    $password = 'pass';

    try {
        $conn = new PDO('mysql:host=localhost;dbname=db', $username, $password);    
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } 
    catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
        }

?>

header.php

// DB Config
include '/assets/config.php';

// User Session
$login = 'liam';
$pass = 'password';

$sth = $conn->prepare("SELECT * FROM access_users WHERE login = ? AND pass = ?");
$sth->bindParam(1, $login);
$sth->bindParam(2, $pass);
$sth->execute();

if ($sth->rowCount() > 0)
{
  // session stuff,
 // refresh page
}  

?>

私のブラウザはページを表示しませんが、ソースを表示するとデータが含まれていません。

4

2 に答える 2

1

これを試して:

// User Session
$login = 'liam';
$pass = 'password';
$sth = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$sth->execute(array(":username" => $login,":password" => $pass));

if ($sth->rowCount() > 0)
{
// session stuff,
// refresh page
  echo $sth->rowCount();
} 

ユーザー名が「liam」であることを確認し、データベースに「password」を渡します

于 2012-11-10T12:16:55.930 に答える
1

を設定しPDO::ERRMODE_EXCEPTIONました。つまり、ステートメントをtry/catchブロックでラップし、 execute()s リターン コードをテストする必要があります。

try {
    $sth = $conn->prepare("SELECT * FROM access_users WHERE login = ? AND pass = ?");
    $sth->bindParam(1, $login);
    $sth->bindParam(2, $pass);
    if (!$sth->execute()) {
        $info = $sth->errorInfo();
        echo 'Error: ' . $sth->errorCode() . ' (' . $info[2] . ")\n";
    } elseif ($sth->rowCount() > 0)
    {
        // session stuff,
        // refresh page
    }
} catch (PDOException $e) {
    echo 'Exception: ' . $e->getMessage() . "\n";
}

もちろん、いくつかのトレースステートメントを入れます。

于 2012-11-10T22:51:26.010 に答える