0

小さなログインスクリプトがあります。

function login($sql) {
try {                   
    $fbhost = "localhost";
    $fbname = "foodbank";
    $fbusername = "root";
    $fbpassword = "";
    $DBH = new PDO("mysql:host=$fbhost;dbname=$fbname",$fbusername,$fbpassword);
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $STH = $DBH->query($sql);       
    $STH->setFetchMode(PDO::FETCH_ASSOC);

    session_start();        
    if ($row = $STH->fetch()) {
        $_SESSION['username'] = "$row[username]";
        header("Location:index.php");   
    }
} catch(PDOException $e) {
    echo $e->getMessage();
}
}

編集:

index.php

$sql = "SELECT username from users where username = ". $_POST['username'] ." AND password = ". $_POST['password'] ."";
login($sql);

上記を挿入クエリから選択クエリに変更しました。今、私は新しいエラーを受け取ります: SQLSTATE[42S22]: 列が見つかりません: 1054 Unknown column 'pvtpyro' in 'where clause'

4

4 に答える 4

1

PDO のコンストラクターは、指定したコードでは定義されていない 2 つの変数 ($fbhost と $fbname) を使用します。

編集:ループ内で
呼び出しているため、エラーが発生する可能性があります。ループから外します。session_start()while

編集 2:
コードを実際にデバッグする必要があります。dieコードのさまざまな部分を挿入して、直前にいくつかの役立つ情報を出力する (これはあまり推奨されない方法です)、または xdebug と IDE を使用して、行ごとに実行し、各変数の正確な状態を確認することができます。など。

于 2013-05-21T16:23:47.370 に答える
1

私が正しく理解し$data $STH->execute($data);ていれば、値が1であっても配列でなければなりません。したがって、そのクエリを次のように置き換えてみてください。$STH->execute(array($data));

編集:

行を次のように変更します。

$data = array($_POST["username"], $_POST["password"]);
$sql = "INSERT INTO users (username, password) value (?, ?)";


$STH = $DBH->prepare($sql);
$STH->execute($data);
于 2013-05-21T16:35:20.683 に答える