0

PHP 関数に問題があります: mysql_real_escape_string

私のテスト文字列:

    @,&!#$%^*()_+' "\/

次のように、このデータを mySql データベースに追加します (要するに):

    $str = mysql_real_escape_string($str);

    $sql = "INSERT INTO テーブル(会社) VALUES('".$str. "')";

DB には次のように格納されます。

    @,&!#$%^*()_+\' \"\\/

しかし、問題は SELECT ステートメントでこのデータを見つけることです。

名前のような会社を見つけたい

    ' "

私のSELECT:

    SELECT companyFROM tableWHERE companyLIKE '%\' "%';
    SELECT companyFROM tableWHERE companyLIKE '%\\' \\"%';
; 動作していません。

これは機能します:

    SELECT `company` FROM `table` WHERE `company` LIKE '%\\\' \\\\"%';

    と

    SELECT `company` FROM `table` WHERE `company` LIKE '%\\\\\\\' \\\\\\\"%'

しかし、なぜこれが機能するのかわかりません:(。

私の質問は次のとおりです。

  • なぜそんなに多くのスラッシュを追加する必要があるのですか?

  • PHPで正しいクエリを作成する方法:

    $query = '\' "';
    '%'.mysql_real_escape_string($クエリ).'%'
    結果: '%\' \"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string($クエリ)).'%'
    結果: '%\\\' \\\"%'

    '%'.mysql_real_escape_string(mysql_real_escape_string(mysql_real_escape_string($query))).'%'
    結果: '%\\\\\\\' \\\\\\\"%'

最後の 1 つだけがうまく機能します。

4

1 に答える 1

0

PHPチームからサポートされていないので、なぜ古い方法を使用しているのですか!

PDOを使ってみよう!それはあなたのためにそれをするでしょうbindvalue.

古い方法よりもはるかに安全です

$db_conn = new PDO('mysql:host=localhost;dbname=mydb',
'user', 'pass');
} catch(PDOException $e){
    echo 'Cannot Connect to the DB!';
}

$sql = 'SELECT name, description
FROM recipes
WHERE chef = :chef';
$stmt = $db_conn->prepare($sql);
$stmt->bindValue(':chef', 'Lorna');
$stmt->execute();

それだけで、使用する必要はありませんmysql_real_escape_string()

試してみましょう

于 2013-10-22T15:51:14.770 に答える