0

ログインを試みたユーザーのユーザー名とパスワードを確認し、セッションを開始する簡単なスクリプトを作成しようとしています。しかし、私はいくつかの問題に直面しています。

以下のスクリプトを実行しようとすると、SUCCESS が出力されません。しかし、あたかもユーザー名とパスワードが間違っているかのように、入力されたユーザー名とパスワードが実際には正しいことを私は知っています。

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

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'");

while($row = mysql_fetch_array($result)){
    echo 'SUCCESS';
}

ただし、以下のスクリプトを実行しようとすると、成功が 2 回出力されます (これは、これまでにデータベースにあるサンプル ユーザーの数です)。これは正しいです。

上記の AND mySQL クエリに問題があると思いますが、正しいように思えます...上記の最初のクエリに問題はありますか? そうでない場合、他に何が問題なのですか?

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

$result = mysql_query("SELECT * FROM users");

while($row = mysql_fetch_array($result)){
    echo 'SUCCESS';
}
4

5 に答える 5

3

ギャップのあるSQLインジェクションの脆弱性を無視すると、クエリ文字列が正しく作成されていません。

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'");
                                                           ^         ^

示されたピリオドが(そしてパスワードセクションでも)「文字列モード」のままなので、文字列の連結を行う代わりに、リテラルピリオドをクエリ文字列に埋め込みます。

期間をリモートにすると、より良い結果が得られます(ただし、SQLインジェクションに対して脆弱です)。

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
于 2012-05-11T16:08:26.077 に答える
1

代わりにこの行を試してください:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='".$username."' AND `password`='".$password."'");

"探していた前に、私が追加した余分なものに注意してください。'.$username.'

于 2012-05-11T16:08:26.347 に答える