0

SQL データベースで $user が subscriberID と等しいすべての情報を取得しようとしています。データを挿入する PDO メソッドを使用していますが、クエリ機能も使用したいと考えています。試行条件から次のエラー メッセージが返されます。

致命的なエラー: オブジェクト以外でのメンバー関数 setFetchMode() の呼び出し

PDOにかなり慣れていないため、データをプルするために使用する方法が問題の原因である可能性があると考えました(データベースへのリンクを確立するtop.phpを含めます)

ご提案ありがとうございます

 <?php
 include "top.php";

    try{
        $user = $_SESSION['login'];
        echo "Welcome <strong>$user</strong> to your saved holidays";

        //$getSavedHolidays = $db->query("SELECT * FROM saved_holidays WHERE subscriberID='$user'");
        //preparing a PDO statment for accessing saved holidays when the logged in user matchs the subscriberID
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $getSavedHolidays = $db->prepare("SELECT * FROM saved_holidays WHERE subscriberID=:user");
        //uses a bind valu as this makes the statment more secure
        $getSavedHolidays->bindValue(":user", $_SESSION['login']);
        $getsavedHolidays->setFetchMode(PDO::FETCH_ASSOC);
        $getSavedHolidays->execute();


        foreach ($Result as $row)
            {
                echo "<p><a href'".$row['link']."'>".$row['title']."</a><br \>" . 
                     $row['description'] . "<br \>" . 
                     $row['pubDate'] ."<br \></p>";
            }

        }

        catch (PDOException $e) 
            {
                 print_r($e->errorInfo);
                    die();
            }

?>

4

2 に答える 2

4

あなたはあなたの声明を準備しているはずです。より安全であるという素晴らしい追加ボーナスがあり、さらに問題を解決します.

$user = $_SESSION['login'];

try {
    $db = new PDO("mysql:host=localhost;dbname=database", "user", "pass");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $getSavedHolidays = $db->prepare("SELECT * FROM saved_holidays WHERE subscriberID=:user");
    $getSavedHolidays->bindValue(":user", $_SESSION['login']);
    $getSavedHolidays->setFetchMode(PDO::FETCH_ASSOC);
    $getSavedHolidays->execute();
    $Result = $getSavedHolidays->fetchAll();

    foreach ($Result as $row) {/*...*/}

}
catch (PDOException $e) {
    print_r($e->errorInfo);
    die();
}

編集

上に貼り付けたコードにエラーがあります。

$$getSavedHolidays = $db->prepare("SELECT * FROM saved_holidays WHERE subscriberID=:user");

する必要があります

$getSavedHolidays = $db->prepare("SELECT * FROM saved_holidays WHERE subscriberID=:user");
于 2012-05-02T15:09:00.393 に答える
2

明示的な構文エラーがあります。一重引用符で閉じる:

$getSavedHolidays = $db->query("SELECT * FROM saved_holidays WHERE subscriberID='$user'");

ところで、PDO を使用しているため、bindValue関数を使用して値を SQL リクエストに渡す方が安全です。

于 2012-05-02T15:05:11.063 に答える