ホームページ  >  記事  >  バックエンド開発  >  php と mysql の対話をエスケープする必要がありますか?

php と mysql の対話をエスケープする必要がありますか?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2023-06-19 09:57:171276ブラウズ

php 対話型 mysql では、一重引用符、二重引用符、バックスラッシュなどの一部の文字が SQL ステートメントで特別な意味を持つため、エスケープする必要があります。これらの文字の誤解を避けるために、これらの文字をエスケープする必要があります。同時に、SQL インジェクション攻撃を回避し、攻撃者がデータの削除や機密情報の取得など、アプリケーションの動作を変更する悪意のある SQL コードを実行することを防ぐことができます。

php と mysql の対話をエスケープする必要がありますか?

このチュートリアルのオペレーティング システム: Windows 10 システム、php8.1.3 バージョン、Dell G3 コンピューター。

PHP を使用して MySQL と対話する場合、一部の文字は SQL ステートメントで特別な意味を持ちます。これらの文字を誤解しないようにするには、エスケープする必要があります。

一般的に、エスケープする必要がある文字には、一重引用符 (')、二重引用符 (")、およびバックスラッシュ (\) が含まれます。

たとえば、PHP のコードMySQL データベースに接続し、MYSQLI 拡張機能を介してデータを挿入します:

```php
$name = "John O'Connor";
$age = 25;
mysqli_query($conn, "INSERT INTO users(name, age) VALUES('$name', '$age')");
```

$name 変数に一重引用符が含まれている場合、SQL ステートメントの実行エラーが発生します。この状況を回避するには、mysqli_real_escape_string() を使用できます。データを変換する関数 エスケープ:

```php
$name = "John O'Connor";
$age = 25;
$name = mysqli_real_escape_string($conn, $name);
mysqli_query($conn, "INSERT INTO users(name, age) VALUES('$name', '$age')");
```

この関数は、特殊文字を安全な同等の形式に自動的にエスケープします。これで、変数 $name に一重引用符が含まれている場合でも、SQL ステートメントの実行エラーは発生しません。

SQL インジェクション攻撃を回避できるという利点があります。SQL インジェクションは、ユーザー入力の不適切なフィルタリングまたはエスケープを悪用する脆弱性であり、攻撃者が悪意のある SQL コードを実行して、エスケープを使用すると、この攻撃を防ぐことができます。

エスケープの方法は、使用するツールやプログラミング言語によって異なります。mysqli_real_escape_string() 関数は次のとおりです。

<?php
// 建立数据库连接
$conn = mysqli_connect("localhost", "username", "password", "database");
// 检查连接是否成功
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
// 要转义的字符串
$string_to_escape = "It&#39;s a beautiful day!";
// 对字符串进行转义
$escaped_string = mysqli_real_escape_string($conn, $string_to_escape);
// 输出未转义的字符串和转义后的字符串
echo "Original string: " . $string_to_escape . "<br>";
echo "Escaped string: " . $escaped_string;
// 关闭数据库连接
mysqli_close($conn);
?>

上の例では、最初に MySQL データベースへの接続を確立しました。次に、エスケープする文字列を宣言し、mysqli_real_escape_string() 関数を使用してエスケープしました。元の文字列とエスケープされた文字列を出力し、データベース接続を閉じます。

mysqli_real_escape_string() 関数を使用する場合、最初のパラメータとして MySQL 接続オブジェクトを渡す必要があることに注意してください。これは、この関数が必要とするためです。正しくエスケープするためにどの MySQL サーバーが使用されているかを知るため。

以上がphp と mysql の対話をエスケープする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。