第41回: PDO接続 — データベースを安全につなぐ最初の一歩

章: 第5章: Web・DB・セキュリティ

「DBに接続する」というとき、あなたのコードは本当に安全ですか?

問題と解決策

「とりあえず動く」DB接続コードは、セキュリティ上の問題を抱えていることが多いです。かつてよく使われていた mysql_* 関数はPHP7で廃止されており、今の開発では使えません。

PDO(PHP Data Objects)を使えば、DB種別を問わない統一インターフェースで接続でき、プリペアドステートメントと組み合わせてSQLインジェクションも防げます。「動くコード」から「安全なコード」への第一歩がPDOです。

PDO vs 古い接続方法

比較項目 mysql_*(非推奨) PDO(推奨)
対応DB MySQLのみ MySQL / SQLite / PostgreSQL 等
SQLインジェクション対策 手動エスケープが必要 プリペアドステートメント
エラー処理 手動でエラーコード確認 例外(Exception)で統一
現在のサポート PHP 7 で廃止済み 現在も標準

チェックポイント: new PDO(...) のオプション配列に PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION を必ず設定しましょう。これがないとエラーが握りつぶされて原因究明が困難になります。

コードサンプル


<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', '');
$stmt = $pdo->query('SELECT 1');

まとめ & 次のステップ

  • PDOはDB種別を問わない統一インターフェースを提供します
  • プリペアドステートメントとの組み合わせで安全なDB操作が実現できます
  • PDO::ERRMODE_EXCEPTION の設定でエラーを確実に検出しましょう
  • DSN文字列の形式(mysql:host=...;dbname=...;charset=utf8mb4)を手で書いて覚えておくと実務で役立ちます

次回は SQLインジェクション対策 — プリペアドステートメントの仕組みをさらに深く学びます。

Related Articles