2

今まで mysql_real_escape_string を使用していましたが、GoDaddy Hostings では機能していないようです。データベースの文字列をクリーンアップするにはどうすればよいですか? PDO::quote を見つけましたが、マニュアルには次のように書かれています

「この関数を使用して SQL ステートメントを作成する場合は、PDO::quote() を使用してユーザー入力を SQL ステートメントに挿入する代わりに、PDO::prepare() を使用してバインドされたパラメーターを使用して SQL ステートメントを準備することを強くお勧めします。パラメーターがバインドされたステートメントは、移植性が高く、便利で、SQL インジェクションの影響を受けないだけでなく、サーバー側とクライアント側の両方がコンパイルされた形式のクエリをキャッシュできるため、補間されたクエリよりもはるかに高速に実行できることがよくあります。」

つまり、prepare + bind_params が同じことをしているということですか? 私の英語でごめんなさい。

4

1 に答える 1

1

残念ながら、PHP のマニュアルはしばしば不明確であったり、間違っていたり、欺かれていたりします。

パラメータがバインドされたプリペアド ステートメントは、

  • 移植性が高い (事実ではない)
  • より便利です(それが唯一の真実です)、
  • SQLインジェクションの影響を受けません(quote()物事も免疫になります)、
  • 多くの場合、実行がはるかに高速です(単なる嘘)

したがって、どちらの方法でも使用できますが、準備されたステートメントを使用すると、コードが短くなります。

$id   = $pdo->quote($id);
$name = $pdo->quote($name);
$stm  = $pdo->query("SELECT * FROM t WHERE id=$id AND name=$name");

対。

$stm  = $pdo->query("SELECT * FROM t WHERE id=? AND name=?");
$stm->execute(array($id,$name));

それが唯一の理由ではありませんが、私が作成したいくつかの説明を参照してください

于 2013-04-21T18:48:04.737 に答える