PDOを使用したDB操作の基本

普段はLaravelのクエリビルダーやeloquentにお世話になっているが、このほど久しぶりにPDOでのDB操作をすることになったので、基本的なアレコレをまとめてみた。

DB接続

まずはDBに接続するところから。これがないと何も始まらない。 ※ここではベタ書きにしているが、実際に開発するときは外部ファイル等で管理すること!!

// DB接続
$pdo = new PDO(
  // ホスト名、データベース名
  'mysql:host=localhost;dbname='hoge';charset=utf8;',
  // ユーザー名
  'user',
  // パスワード
  'password'
);

トランザクション

データを登録する際は、適切なトランザクション管理を行うこと。

try {
  // トランザクション開始
  $pdo->beginTransaction();

  // コミット
  $pdo->commit();
} catch (PDOException $e) {
  // エラーの場合はロールバックしてログ出力
  $pdo->rollBack();
  error_log($ex->getMessage());
}

SQLの実行方法

基本的にはこの形式。 prepareの中の文を変えることでINSERTやDELETEも対応する。

// SQL作成
$stmt = $pdo->prepare("SELECT * FROM user WHERE id = :id");

// 登録するデータをセット
$stmt->bindParam( ':id', $id, PDO::PARAM_INT);

// SQL実行
$res = $stmt->execute();

SQLのフェッチパターン

SELECT文の実行結果のフェッチ方法を変えることにより、取得件数や取得の方式も変えることができる。

・件数の違い

// 先頭の1件だけ取得
$data = $stmt->fetch(PDO::FETCH_ASSOC);

// 全権取得
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

・方式の違い

// 取得結果の配列のキーがカラム名になる
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 指定した2つのカラムがキーと値のペアになる
$data = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);

// 指定した1つのカラムの1次元配列になる
$data = $stmt->fetchAll(PDO::FETCH_COLUMN);