1. ホーム
  2. php

[解決済み] mysql_real_escape_string が動作しない [duplicate].

2022-02-14 17:36:17

質問

を行おうとすると mysql_real_escape_string ログインシステムの場合、フォームから変数が記録されません。もし私が

$username = $_POST['username'];

と入力してechoすると、表示される。

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

と入力してechoしても、表示されません。また、データベース接続のテストも行いましたが、動作しています。これは私のコードです。

session_start();
$db = mysqli_connect($connection, $user, $pass, $database);
if (isset($_POST['submit'])) {
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    echo $username;

    $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    echo $sql;
    $result = mysqli_query($sql, $db);

以前は動作していたのですが、なぜか急に動作しなくなりました。 何かありましたら、よろしくお願いします :)

解決方法を教えてください。

まず、クエリを作成するためにデータをエスケープしてはいけません。プリペアドステートメントを使用する必要があります。参照 PHPでSQLインジェクションを防ぐには?

とはいえ、あなたの問題は、あなたが mysql_real_escape_string() がありますが、あなたは mysqli (ただし mysql )接続になります。 mysqlimysql は異なる拡張子です。お願い を使用しないでください。 mysql_* を使用します。 mysql_* の機能は古くなっています。 非推奨 これらは、最新の PHP (バージョン 7.0 以降) からは完全に削除されています。使用方法 MySQLi または PDO の代わりに

問題を解決するには 一時的に を使用します。 mysqli_real_escape_string() の代わりに mysql_real_escape_string() . これを修正するには 永続的かつ正確に プリペアド・ステートメントを使用し、エスケープしないこと。