MySQL プリペアド ステートメント: エスケープを超えて
手動エスケープは SQL インジェクションを防ぐための一般的なアプローチですが、エラーが発生しやすい可能性があります。 PDO (PHP Data Objects) は、標準 MySQL 内の堅牢な代替手段を提供します。
PDO は、すべてのデータベース入力がテキストとして扱われることを保証し、手動エスケープの必要性を排除します。このアプローチを、データ表示用の適切な HTML エンティティ エンコーディングと組み合わせることで、インジェクションに対する強固な防御を提供します。
PDO とのデータベース接続を確立するには、データベース オブジェクトを作成します。
try {
$db = new PDO("mysql:host=[hostname];dbname=[database]", '[username]', '[password]');
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec('SET NAMES utf8');
} catch (PDOException $e) {
echo $e->getMessage();
}
クエリを準備するには、prepare メソッドを使用します:
$stmt = $db->prepare('SELECT * FROM Table WHERE id = ?');
bindParam メソッドを使用して値をクエリのプレースホルダーにバインドします:
$stmt->bindParam(1, $id);
execute メソッドを使用してクエリを実行します:
$stmt->execute();
PDO には多くの利点があります:
データベース接続には常に PDO を使用し、それを適切な HTML エンティティ エンコーディングと組み合わせて安全なデータ処理を行うようにしてください。 PDO は、アプリケーションを SQL インジェクションから保護するための堅牢かつ効率的な方法を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3