※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

PDO接続フェッチ利用

  • フェッチとは、取得した結果セットからデータを取り出すことをいう
  • PDO関数で用意されたフェッチメソッドは3種類


PDO関数フェッチメソッド

メソッド 概要
fetch() 結果セットから次の行を取得
fetchAll() 結果セットからすべての行を含むデータ取得
fetchColumn() 結果セットの最初のフィールドからデータを取得

フェッチモード

定数 概要 コード例
PDO::FETCH_NUM 一般配列 $row[0]
PDO::FETCH_ASSOC 連想配列 $row['name']
PDO::FETCH_OBJ オブジェクト $row->name
PDO::FETCH_BOTH 通常/連想配列(デフォルト) $row[0] / $row['id']
PDO::FETCH_BOUND 個別にバインド $name
PDO::FETCH_CLASS 指定クラス $row->name
PDO::FETCH_INTO 指定インスタンスに対す $row->name

 

結果セットの取得

result.php
<?php
  $dsn = 'mysql:dbname=testDB;host:localhost';  //testDBは任意
  $user = 'root';                                //DB接続ユーザ名
  $password = '';                               //DB接続用パスワード

  try{
    $db = new PDO($dsn, $user, $password);
    $rs = $db->query('SELECT * FROM member ORDER BY id ASC');
    print('<table border="1">');
    print('<tr><th>name</th><th>address</th><th>tel</th><th>mail</th></tr>');

    while ($row = $rs->fetch(PDO::FETCH_ASSOC)) {
?>
    <tr>
        <td><?php print($row['name']); ?></td>
        <td><?php print($row['address']); ?></td>
        <td><?php print($row['tel']); ?></td>
        <td><?php print($row['mail']); ?></td>
    </tr>
<?php
    }
    print('</talbe>');
  } catch (PDOException $e){
    print('エラー発生 : ' . $e->getMessage());
  }

?>

 

fetchAllの使用例

fetchAll.php
<?php
  $dsn = 'mysql:dbname=testDB;host:localhost';  //testDBは任意
  $user = 'root';                                //DB接続ユーザ名
  $password = '';                               //DB接続用パスワード

  try{
    $db = new PDO($dsn, $user, $password);
    $rs = $db->query('SELECT * FROM member ORDER BY id ASC');
    $data = $rs->fetchAll();
    print('<ul>');
    foreatch ($data as $value) {
        print('<li>');
            print($value['name'] . ' : ' . $value['address'] . ' : ' . $value['tel']);
        print('</li>');
    }
    print('</ul>');
  } catch (PDOException $e){
    print('エラー発生 : ' . $e->getMessage());
  }

?>

 

  

トランザクション処理

◆トランザクション処理とは、関連する複数の処理をグループ化したもので、例えば、フォーム上で入力された値を、複数のテーブルに任意の値をインサート処理したりする場合に使用します。
◆例えば、1つめのデータ処理に成功し、2つめのデータ処理が失敗した場合にデータの不整合が起きます。その場合には、1つめのデータ処理結果も無効にします

transaction.php

<?php
  $dsn = 'mysql:dbname=testDB;host:localhost';  //testDBは任意
  $user = 'root';                                //DB接続ユーザ名
  $password = '';                               //DB接続用パスワード

  try{
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec('BEGIN'); 
    $db->exec('INSERT INTO member(name) VALUES('名前だよ')');
    $db->exec('INSERT INTO member(name) VALUES('誰だよ')');
    $db->exec('COMMIT');
    print('登録に成功');
  } catch (PDOException $e){
    $db->exec('ROLLBACK');
    print('エラー発生 : ' . $e->getMessage());
  }

?>

 

◆PDOには専用のトランザクション処理用関数があるので、それを使用するのも良いでしょう

上記で使用している例 専用関数例
$db->exec('BEGIN');
$db->beginTransaction();
$db->exec('COMMIT'); $db->commit();
$db->exec('ROLLBACK'); $db->roolback();

 

 



 

 

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|