1

mysql_fetch_assoc() を使用してデータベースから結果を取得しようとしていますが、次のようにエコーしても結果が得られないようです (真っ白な画面):

$email_address = $_POST['email_address'];
    $password = $_POST['password'];

    if(login($email_address, $password)){
        $query = mysql_query("SELECT * FROM `users` WHERE `email_address` = '$email_address' AND `password` = '$password'");
        $row = mysql_fetch_assoc($query);
        echo $row['email_address'];
    }else{
        echo "Invalid login";
    }
4

3 に答える 3

0

die(mysql_error())クエリをこれに変更し、クエリにエラーがあるかどうかを確認するために追加します。

$email_address = $_POST['email_address'];
$password = $_POST['password'];

if(login($email_address, $password)){
    $query = mysql_query("SELECT * FROM `users` WHERE `email_address` = '$email_address' AND `password` = '$password'") or die(mysql_error());
    $row = mysql_fetch_assoc($query);
    echo $row['email_address'];
} else {
    echo "Invalid login";
}
于 2013-08-03T04:44:48.597 に答える
0

if($query==NULL) {/* handle error */}接続/データベース エラーをキャッチしてみてください。

それで

$nrows=mysql_num_rows($query); //get the number of rows returned
if($nrows==0) //no match
else if($nrows==1) //match
else {/*more than 1 rows, probably sql injection */}

つまり、非推奨の MySQL 拡張機能から離れて、代わりにMySQLiを使用してください。また、できればbcryptを使用して、いつでもサイトを公開する予定がある場合は、パスワードをハッシュしてください。パスワードのハッシュに単純なハッシュ関数 (ソルトを使用しても) を使用してはならない理由と、代わりにKDFを使用する理由についての簡単な概要については、このビデオを参照してください。

最後に、コードは SQL インジェクションに対してオープンです。それに対して保護する方法については、この質問を参照してください。

補足として、何人かの人々はそうするのを避けますSELECT *

  • スキーマは後で変更される可能性があります
  • 不要な列を提供するため、余分な転送/処理時間がかかります
  • 必要な列を選択すると、コードがわかりやすくなります
于 2013-08-03T03:45:10.053 に答える