1
$mysqli = mysqli_connect("localhost", "root", "pass", "test");

function check_login($mail,$pwd){   
    global  $mysqli;    
    if($stmt=  $mysqli->prepare('SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)')){
        $stmt->bind_param("ss", $mail, $pwd);       
        $stmt->execute();
        $stmt->bind_result($count);
        $stmt->close();
        var_dump($count);
    }
    return ($count > 0 ? true : false);
}

check_login('test@gmail.com','pass');

stackoverflow でいくつかのスクリプトを見て、このスクリプトを作成しました。実行しようとしたところ、スクリプトの実行後に $count が NULL であることがわかりました。

なぜこれがうまくいかないのか知りたいです。Mysqlで同じコマンドを実行しようとしましたが、結果が表示されました。

誰かが私を助けて..

4

2 に答える 2

1

mysqli::bind_result->execute呼び出しの後と呼び出しの前に呼び出す必要があり->fetchます。fetch() はオプションではありません。(バインドされた結果) 変数の参照は、結果行を手動で抽出するための代替手段に過ぎないからです。

だからあなたのコードで:

    $stmt->execute();
    $stmt->bind_result($count);
    $stmt->fetch();  // result array thrown away
于 2012-11-24T04:32:26.360 に答える
1

まず、コード、特にデータベースをいじる必要があるコードをコピーして貼り付けてはいけません。コードが何を達成しようとしているのかを理解してから、自分のコードを書きましょう。
第二に、交換

 
  'SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)'
 

 
 'SELECT COUNT(*) FROM `users` WHERE mail =? AND pwd =?'
 

パスワードがデータベースに平文で保存されていたため、コードが実行されなかった可能性があります。
それが機能するかどうかお知らせください。

于 2012-11-24T04:32:50.953 に答える