0

mysqli-> fetch_row()(またはfetch_object()、fetch_array())を使用して結果をフェッチしようとしていますが、実行時にコードを実行すると、次のエラーが発生します。

致命的なエラー:23行目の...の非オブジェクトでメンバー関数fetch_row()を呼び出します。

これを行う問題の変数は、以下のコードの$resultsです。$userと$passwordは、このファイルが含まれている別の.phpファイルから値を取得するため、現時点ではそれほど重要ではありません。私が間違っている場合は訂正してください。ただし、$resultsが$db-> query($ query)に設定されている場合は、$ dbのプロパティ(別名mysqliクラス)を継承することになっているのではないでしょうか。

class mySQLHelper{

    public function checkPass($user, $pass){
        global $db;
        $db =  new mysqli();
        $db->connect('localhost', 'root', '', 'mydb');
        if (mysqli_connect_errno()){
            echo 'Can not connect to database';
            echo mysqli_connect_errno(). mysqli_connect_error();
            exit;
            return false;
        }


        $query = "SELECT user, password FROM Users WHERE user = $user AND password = $pass " ;

       echo $query;

        $results = $db->query($query);

        while ($row = $results->fetch_row()){

            echo htmlspecialchars($row->user);
            echo htmlspecialchars($row->password);


        }

        $results->close();

        $url = 'http://'. $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/";
        if(!$results){
         //   mysqli_close($db);
          //  header("Location:.$url.login.php&msg=1");

        }

        else{
        //    mysqli_close($db);
        //    header("Location:.$url.featured.php");


        }

    }

}

4

5 に答える 5

3

スクリプトにエラーチェックがないため、クエリのエラーは処理されません。

    $query = "SELECT user, password FROM Users 
    WHERE user = '$user' AND password = '$pass' " ;
    //           ^ quotes needed     

    echo $query;

    $results = $db->query($query);

    // handle a error in the query
    if(!$results)
      die($db->error);

    while ($row = $results->fetch_row()){
        echo htmlspecialchars($row->user);
        echo htmlspecialchars($row->password);
    }
于 2012-09-25T18:22:35.750 に答える
3

クエリは次の行で失敗しています:

$results = $db->query($query);

このため、$resultsfalse-期待どおりの結果オブジェクトではありません。

この問題を修正するには、変数を引用符で囲む必要があります(またはプリペアドステートメントを使用します)。

$query = "SELECT user, password FROM Users WHERE user = '".$user."' AND password = '".$pass."' " ;

ただし、SQLインジェクションの問題を防ぐために、プリペアドステートメントを使用するように更新することをお勧めします。

$stmt = $db->prepare('SELECT user, password FROM Users WHERE user = ? AND password = ?');
$stmt->bind_param('ss', $user, $pass);
$stmt->execute();
$results = $stmt->get_result();
于 2012-09-25T18:23:31.130 に答える
2

ユーザーとパスワードのフィールドテキストまたはvarcharの場合は、それらを一重引用符で囲む必要があります

$query = "SELECT user, password FROM Users WHERE user = '".$user."' AND password = '".$pass."' " ;
于 2012-09-25T18:22:30.620 に答える
1

クエリが正しく実行されるかどうかを確認する必要があります。

if ($result = $mysqli->query($query))
{
}

var_dump($ results)を使用して、内容を確認します

于 2012-09-25T18:24:35.190 に答える
0

なぜそれを操作しようとしたif($results) 後にチェックしているのですか?

これ...

$results->close();
//...
if(!$results){
    //...
}

する必要があります...

if(!$results){
    //...
}
$results->close();
于 2012-09-25T18:23:52.720 に答える