0

私は次のコードをしなければなりません:

session_start();
if(isset($_SESSION['Username']))
{
    //User has selected auto sign-in re-fill session variables.
    $mysqli = new mysqli('****','****','****','****');
    if($mysqli->errno)
    {
        //Error connecting
    }
    else 
    {
        //No error connecting to database
        $stmt = $mysqli->prepare("SELECT Expires FROM Subscribers WHERE UName=?");
        $stmt->bind_param('s', $_SESSION['Username']);
        $stmt->execute();
        $stmt->bind_result($Expires);
        $stmt->store_result();
        while($row = $stmt->fetch())
        {
            if($Expires < time())
            {
                //Deny user
                $pageToShow = "Payment";
            }
            else 
            {
                //Accept    
                $pageToShow = "Content";
            }
        }
    }
}
else 
    { ... }

エラーが発生しますFatal error: Call to a member function bind_param() on a non-object in /home/content/42/7401242/html/****/wp-content/themes/****/archive.php on line 15

約30分前に別のページでこのようなエラーが発生FROMし、SQLクエリから取得する必要がありましたが、コードのすべての文字を何度も読み取り、再読み取り、再チェックしました。髪の毛を全部抜こうとしています...

私は何が間違っているのですか?

4

2 に答える 2

2

それは簡単です。
あなたはエラーを処理していません。
そして、それを行う方法を尋ねることさえしません。

他の質問では、エラーを自分で確認する方法を示すのではなく、エラー自体を示しました。
現在の質問では、答えは「クエリを確認する」ですが、これもあまり役に立ちません。

他の人にクエリのタイプミスを見つけるように依頼する代わりに、mysqliにそれを依頼する必要があります。これは、特にクエリではなく別の場所で別の間違いが発生する可能性があるため、はるかに効率的です。

したがって、すべてのデータベースの相互作用の結果を確認し、それをPHPエラーに変換する必要があります。

$sql = "SELECT Expires FROM Subscribers WHERE UName=?";
$stmt = $mysqli->prepare($sql) or trigger_error($mysqli->error);
...
$stmt->execute() or trigger_error($mysqli->error);

だから、あなたはすぐに何が悪いのかを知るでしょう。

于 2013-02-08T03:58:25.117 に答える
1

このエラーは、SQLクエリが空の結果を返していることを示しています。あなたがしなければならない2つのこと:

  1. データベースに正しく接続されていること、およびデータベース内のデータにアクセスするためのアクセス許可があることを確認してください

  2. SQL クエリをチェックして、データベースに結果が返されるかどうかを確認してください。

于 2013-02-08T03:34:02.997 に答える