-4

エラーが発生したときにスクリプトでログインすることをテストしていました

致命的なエラー: 30 行目の /CMS/index.php の非オブジェクトに対するメンバ関数 prepare() の呼び出し

30 行目と 30 行目あたりを確認しましたが、エラーの場所がわかりません。

    $userp = $sql->prepare("SELECT user, passwd FROM users WHERE user = :username AND passwd = :password LIMIT 1");
    $userp->execute(array(
        'username' => $username,
        'password' => $passwd
        ));

エラーは、$sql 変数を宣言しなかったことです。Mea culpa。

4

1 に答える 1

0

クエリを実行する前に、$sql が PDO インスタンスとして作成されていることを確認する必要があります。接続が失敗した場合、 $sql は null になります...確認する良い方法は次のとおりです。

$sql = null;
try {
    $sql = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

if($sql instanceof PDO)
{
     $userp = $sql->prepare("SELECT user, passwd FROM users WHERE user = :username AND             passwd = :password LIMIT 1");
     $userp->execute(array(
        'username' => $username,
        'password' => $passwd
    ));
}
else
{
     // $Sql is null, and not an instance of PDO
}
于 2013-08-03T04:19:11.927 に答える