2

私はこのエラーを持っています:

致命的なエラー: 8 行目の /Applications/XAMPP/xamppfiles/htdocs/login.php の非オブジェクトに対するメンバー関数 query() の呼び出し

行は次のとおりです。

$res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");

これは login.php です:

$user = $_POST['user'];
$pass = $_POST['pass'];
$pw = md5($pass); 
include_once('connect.php');

function check_login($user,$pw,&$result){
    $res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
    $cont = 0;
    while($row = $res->fetch_object()){
        $cont++;
        $result = $row;
    }
    if($cont == 1){
        return 1;
    }
    else{
        return 0;
    }
}

if(!isset($_SESSION['userid'])){
  if(isset($_POST['login'])){
    if(check_login($user,$pw,$result) == 1){
        session_start();
        $_SESSION['userid'] = $result->id_user;
        header("location:index.php?var=ok");
    }
    else{
        header('location:index.php?var=log');
    }
  }
}

そして connect.php のコード:

$mysqli = new mysqli('localhost', 'root', 'pass', 'cms' );
if ($mysqli->connect_error) {
   die('Error de Conexión (' . $mysqli->connect_errno . ') '
        . $mysqli->connect_error);
 }

何が問題なのですか?データベースの接続に問題がありますか?

4

5 に答える 5

7

これは、スコープの問題である可能性が最も高いです。これは$mysqli、インクルード ファイルで定義した変数がcheck_login関数のスコープ外であることを意味します (つまり、この関数内では認識されません)。

$mysqliグローバルスコープから変数を取得しようとすることができます

function check_login($user,$pw,&$result){
    global $mysqli;
    $res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
    // ...

編集:ああ、コード内のSQLインジェクションの脆弱性にも注意する必要があります。この問題を防ぐには、準備済みステートメントを使用します (または、少なくとも のような関数で入力変数をエスケープしますmysqli::real_escape_string)。

于 2013-02-11T22:27:06.490 に答える
3
function check_login($user,$pw,&$result){
    global $mysqli;
    $res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
    $cont = 0;
    while($row = $re[...]

「グローバル」に注意してください。これにより、var がメソッドのスコープに配置されます。これは簡単で汚い解決策ですが、この場合は機能します。

于 2013-02-11T22:26:04.900 に答える
2

関数 check_login の変数 $mysqli はスコープ外 (関数外で宣言されている) であるため、null です。

于 2013-02-11T22:26:40.887 に答える
2

$mysqli 変数が、クエリを実行するコードの範囲内で適切に設定されていないようです。$mysqli が実際に mysqli オブジェクトであり、null に設定されていないことを確認できますか?

コードで ->query メソッドをecho print_r($mysqli);呼び出す直前。

正しく設定されていない場合は、理由がわかるまでコード内で変数を逆方向に追跡します

于 2013-02-11T22:23:36.803 に答える