MySQL プリペアド ステートメント: エスケープを超えて
手動エスケープは SQL インジェクションを防ぐための一般的なアプローチですが、エラーが発生しやすい可能性があります。 PDO (PHP Data Objects) は、標準 MySQL 内の堅牢な代替手段を提供します。
PDO は、すべてのデータベース入力がテキストとして扱われることを保証し、手動エスケープの必要性を排除します。このアプローチは、データ表示用の適切な HTML エンティティ エンコーディングと組み合わせることで、インジェクションに対する強固な防御を提供します。
PDO とのデータベース接続を確立するには、データベース オブジェクトを作成します。
<code class="php">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(); }</code>
準備するにはクエリの場合は、prepare メソッドを使用します:
<code class="php">$stmt = $db->prepare('SELECT * FROM Table WHERE id = ?');</code>
bindParam メソッドを使用してクエリのプレースホルダに値をバインドします:
<code class="php">$stmt->bindParam(1, $id);</code>
execute メソッドを使用してクエリを実行します:
<code class="php">$stmt->execute();</code>
PDO には多くの利点があります:
データベース接続には必ず PDO を使用し、それを次と組み合わせてください。安全なデータ処理のための適切な HTML エンティティ エンコーディング。 PDO は、SQL インジェクションからアプリケーションを保護するための堅牢かつ効率的な方法を提供します。
以上がPDO は手動エスケープを超えて MySQL のセキュリティをどのように強化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。