2

私はPDOに非常に慣れていません。

私は自分のウェブサイトへのログインページを作成しようとしましたが、コードは以下に示されています

<?php
     if(isset($_POST['username'])and isset($_POST['password']))
     { 

session_start();
$db = new PDO('mysql:host=localhost;dbname=hydra', 'root', '');

$username = $_POST['username'];
$password = $_POST['password'];

$query = $db->query("SELECT * FROM login where username=:username AND password=:password");
    $query->bindValue(":username", $username, PDO::PARAM_STR);
    $query->bindValue(":password", $password, PDO::PARAM_STR);
    $query->execute();

    if($query->rowcount() >0 )
    {
        echo "No Records Found!";
        header('Location: login.php');
    }
    else
    {
        $_SESSION['username'] = $_POST['username'];
        header("Location: home.php");

    }




           }
         ?>

ログインしようとした後、次のエラーが発生しました: Call to a member function bindValue() on a non-object

私のコードの何が問題なのですか?

4

4 に答える 4

1

次のようにしてみてください。

$stmt = $db->prepare("SELECT * FROM login WHERE username=:username AND password=:password");
    $stmt->bindValue(":username", $username, PDO::PARAM_STR);
    $stmt->bindValue(":password", $password, PDO::PARAM_STR);
    $stmt->execute();

クエリではなくステートメント ( $stmt)を作成する必要が$db->prepare("sql")あります。次に、params を準備済みステートメントにバインドして実行できます。

于 2013-10-30T11:55:58.687 に答える
0

query() ではなく prepare() を使用する必要があります

あなたのコードも肥大化しています。

$stmt = $db->prepare("SELECT * FROM login where username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);

で十分
です また、接続後にこの行を追加する必要があります

$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
于 2013-10-30T11:53:01.847 に答える
0

PDO::query戻り値はPDOStatementオブジェクトまたはFALSE失敗時です。

あなたの場合、失敗が発生し、返された値はオブジェクトFALSEではありません。PDOStatement

var_dump直後に使用$query = $db->query(...して、エラーが発生していることを確認してください。また、PDO エラー チェックを使用して、エラー メッセージの内容を確認します。

于 2013-10-30T11:55:03.937 に答える