1

私は数日前にコーディングを学び始めましたが、mysql_real_escape_string、特にlogin.phpでいくつかの問題が発生しています。

エラーメッセージ:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'elegant'@'localhost' (using password: NO) in /home/elegant/public_html/php/login.php on line 3

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the     server could not be established in /home/elegant/public_html/php/login.php on line 3

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'elegant'@'localhost' (using password: NO) in /home/elegant/public_html/php/login.php on line 4

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/elegant/public_html/php/login.php on line 4
Please enter a username and a password

これが私がこれまでに持っているコードです-このコードはローカルホストで機能しましたが、オンラインにしてデータベーステーブルをインポートすると、いくつかの問題が発生しました:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

if ($username&&$password)

{

$connect = mysql_connect("localhost","elegant_root","password;1") or die("Couldn't             connect!");
mysql_select_db("elegant_ezworkstation") or die("Couldn't find database");

$query = mysql_query("SELECT * FROM users WHERE username=$username");

$numrows = mysql_numrows($query);

if ($numrows!=0)
{

while ($row = mysql_fetch_assoc($query))
{

    $dbusername = $row['username'];
    $dbpassword = $row['password'];

}

if ($username==$dbusername&&$password==$dbpassword)
{

    echo "You're in";

}
else
    echo "Incorrect password!";

}
else
die("That user doesn't exist");

}

else
die("Please enter a username and a password");

?>

編集:mysqliに変更したところ、次のエラーが発生しました:

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /home/elegant/public_html/php/login.php on line 3

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /home/elegant/public_html/php/login.php on line 4
4

1 に答える 1

5

dbに接続した後に置くmysql_real_escape_string()ことはうまくいきます。

ただし、mysqliまたはPDOに移行する必要があります。MySQLは現在非推奨です。あなたを助けるためのいくつかのリンク

  1. mysqlからmysqliまたはpdoに移行しますか?
  2. mysqliまたはPDO-長所と短所は何ですか?

エスケープするためのmysqliとPDOの同等のコマンドはmysqli_real_escape_string()PDO::quote()それぞれとになります。

人々が指摘しているように、PDOは間違いなくより良い選択肢です。これは私が以前にPDOを他のものと比較して書いた答えです。

PDO-実際の事実とベストプラクティス?

また、これのもう1つの利点は、名前付きパラメーターでプリペアドステートメントを使用する場合に、エスケープ関数を使用する必要がないことです。

于 2012-10-25T14:30:33.110 に答える