【PHP】PDOを用いたデータベースへの接続

phpを用いてデータベースに接続する方法を紹介します。現在はPDO(PHP Data Objects)を利用する方法が主流なようなので、PDOを用いたソースコードを簡単に紹介していきます。

データベースへの接続を確認するコード

<?php
  $dsn = 'mysql:host=ホスト名;dbname=データベース名;charset=utf8;';
  $user = 'ユーザー名';
  $password = 'パスワード';

  try{
  	$pdo = new PDO($dsn, $user, $password); //データベースに接続

        /* 以下2文はお決まりのコード */
        // プリペアドステートメントのエミュレーションを無効にする
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        // 例外がスローされる設定にする
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  	echo '接続に成功しました。';
  	$pdo = NULL; // 接続を解除する
  }catch (PDOException $e){
        echo '接続に失敗しました。';
  	echo 'Error:'.$e->getMessage();
  	exit();
  }
?>

最初の3行を使用するデータベースの情報に変更して、貼り付けて下さい。ブラウザ上に「接続に成功しました。」と書いてあれば問題ありません。

「ホスト名」に関してですがレンタルサーバーを借りている場合、mysqlxxx.yyy.zzzz.aaaのようなアドレスを使用してください(レンタルサーバー会社ごとに異なります、xxxの部分は番号)。ネット上だと「ホスト名」がlocalhostやIPアドレスになっていて、ここまでたどり着くのに苦労したので一応書き残しておきます。

データベース上からレコードを取得してくるコード

<?php
  $dsn = 'mysql:host=ホスト名;dbname=データベース名;charset=utf8;';
  $user = 'ユーザー名';
  $password = 'パスワード';

  try{
    $pdo = new PDO($dsn, $user, $password); //データベースに接続
    /* 以下2文はお決まりのコード */
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // SQL文を作る(全レコードを取得する)
    $sql = "SELECT * FROM テーブル名";
    // SQL文をセットする
    $stm = $pdo->prepare($sql);
    // SQL文を実行する
    $stm->execute();
    // 結果の取得(連想配列で返す)
    $result = $stm->fetchAll(PDO::FETCH_ASSOC);
    foreach ($result as $row){
      print_r($row);
      echo '<br>';
    }
  }catch (PDOException $e){
    echo '接続に失敗しました。';
    echo 'Error:'.$e->getMessage();
    exit();
  }
?>

データベースのテーブルを指定して、レコードをすべて取得してくるコードです。取得してきたレコードは連想配列として格納されます。foreachで取得した連想配列の中身をすべて表示しています。

※データベースのテーブル名に「-」が入っているとエラーを起こすので「_」を使うようにしましょう。