1

サイトを mysql から mysqli に変換していて、mysqli_real_escape_string のような mysqli_real_escape_string をどのように使用するのか疑問に思っています。言い換えれば、古いエスケープのように、新しいエスケープで文字列をどのように扱うのですか?

私はちょうどするために使用します

mysql_real_escape_string($string);

しかし、今私はしなければならない

mysqli_real_escape_string(<-What should i put here?->,$string);

では、文字列を古いエスケープのように扱うには、最初のパラメーターに何を入力すればよいでしょうか?

エラー:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in /var/www/frostbase/core/functions/general.php on line 22
4

4 に答える 4

2

PHPマニュアルによると、プロトタイプは

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

つまり、mysqli リンク識別子を指定する必要がある最初のパラメーターとして、2 番目のパラメーターはエスケープする文字列にする必要があります。

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$escapedValue = mysqli_real_escape_string($link, "yourString");
?> 
于 2013-06-19T06:03:04.043 に答える
2

セキュリティ上の理由から、ここで提案されているように、準備されたステートメントを使用することをお勧めします。Mysql_real_escape_string は、SQL インジェクションを防ぐのに十分ではない場合があります。たとえば、エスケープ関数 () にもかかわらず、マルチバイト文字セットが悪用される可能性があるためです。mysql_real_escape_string() と Prepared Statements の比較

PHP のプリペアド ステートメントは、次のように使用できます。

  $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
  $stmt->bindParam(1, $name);
  $stmt->bindParam(2, $value);

PHP のプリペアド ステートメントの詳細

于 2013-06-19T06:18:40.460 に答える
1

すべての mysql* 関数は、開かれた接続を背後で暗黙的に渡しました。mysqli では、常に接続を明示的に渡す必要があります。これは、はるかに優れたコーディング方法です。これには、手続き型とオブジェクト指向の 2 つのスタイルから選択できます。

$link = mysqli_connect(...);

$string = mysqli_real_escape_string($link, $string);
$string = $link->real_escape_string($string);

さらに良いことに、準備済みステートメントを使用する必要があります。背景情報については、The Great Escapism (または、テキスト内のテキストを操作するために知っておくべきこと) を参照してください

于 2013-06-19T06:03:01.357 に答える