普段は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);