安全なデータベース相互作用のために、古い「mysql_*」関数を PDO およびプリペアドステートメントに置き換えるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-06 13:42:02
オリジナル
342 人が閲覧しました

How to Replace Outdated `mysql_*` Functions with PDO and Prepared Statements for Secure Database Interactions?

mysql_* 関数を PDO およびプリペアド ステートメントで置き換える

質問:

古い mysql_* 関数を次のステートメントに置き換えるにはどうすればよいですか? PDO とプリペアド ステートメントを使用して、データベースにデータを安全に保存したりデータベースから取得したりできますか?

答え:

  1. PDO 接続を確立します:
$hostname = '*host*';
$username = '*user*';
$password = '*pass*';
$database = '*database*';

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
ログイン後にコピー
  1. データの挿入にプリペアド ステートメントを使用する:
$username = $_POST['username'];
$email = $_POST['email'];

$stmt = $dbh->prepare("INSERT INTO `users` (username, email)
                        VALUES (?, ?)");

$stmt->bindParam(1, $username, PDO::PARAM_STR);
$stmt->bindParam(2, $email, PDO::PARAM_STR);

$stmt->execute();
ログイン後にコピー
  1. BindParam の長さパラメーター:

PDO::PARAM_STR には長さパラメーターは必要ありません。ただし、データベース テーブルのフィールドに最大文字数制限がある場合は、以下に示すように PDO::PARAM_STR の後にそれを指定できます。

$stmt->bindParam(1, $username, PDO::PARAM_STR, 255);
ログイン後にコピー
  1. データを取得するための準備されたステートメント:
$user_id = $_GET['id'];

$stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = ?");

$stmt->bindParam(1, $user_id, PDO::PARAM_INT);
ログイン後にコピー
  1. さまざまなデータ型でのbindParamの使用:
  • 文字列のPDO::PARAM_STR
  • 整数の場合は PDO::PARAM_INT
  • ブール値の場合は PDO::PARAM_BOOL
  1. 安全性:
  • プリペアド ステートメントを使用すると、mysql_real_escape_string などの関数を使用して手動で文字列をエスケープする必要がなくなります。
  • PDO はクエリの実行を安全に処理し、SQL インジェクションの脆弱性を防ぎます。
  • ただし、注意することが重要です。準備されたステートメントだけではセキュリティは保証されません。入力検証と適切なサニタイズ措置を引き続き実施する必要があります。

以上が安全なデータベース相互作用のために、古い「mysql_*」関数を PDO およびプリペアドステートメントに置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート