「PDO接続フェッチ利用」の編集履歴(バックアップ)一覧に戻る

PDO接続フェッチ利用 - (2008/11/02 (日) 06:21:06) の編集履歴(バックアップ)


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());
  }

?>

 

 

メソッド 概要
getFile() 例外が発生したファイル名を取得
getLine() 例外が発生した行番号を取得
getCode() エラーコードを取得
getMessage() 例外メッセージを取得
getTraceAsString() バックトレースを文字列として取得

getAttribute / setAttribute メソッドで参照/設定可能な接続パラメータ

定数 概要
PDO::ATTR_AUTOCOMMIT オートコミットを有効化(0 | 1)
PDO::ATTR_TIMEOUT タイムアウト値
PDO::ATTR_ERRMODE エラーモード
    PDO::ERRMODE_SILENT エラー出力を行わない
    PDO::ERRMODE_WARNING 警告を出力
    PDO::ERRMODE_EXCEPTION PDOExceptionを発生
PDO::ATTR_SERVER_VERSION サーバのバージョン
PDO::ATTR_CLIENT_VERSION クライアントのバージョン
PDO::ATTR_SERVER_INFO サーバ情報
PDO::ATTR_CONNECTION_STATUS サーバへの接続状態
PDO::ATTR_CASE カラム名を大文字/小文字に変換
    PDO::CASE_LOWER カラム名を小文字に変換
    PDO::CASE_NATURAL ドライバからの戻り値のまま
    PDO::CASE_UPPER カラム名を大文字に変換
PDO::ATTR_CURSOR_NAME カーソル名
PDO::ATTR_ORACLE_NULLS 空文字をNULLに変換するか(0 | 1)
PDO::ATTR_PERSISTENT 接続的持続を有効にするか

 

insert処理サンプル

insert_form.php

<html>
<head><title>メンバー登録</title></head>
<body>
  <form method="post" action="insMember.php">
  <talbe border="0">
    <tr>
       <th>名前:</th>
       <td><input trype="text" name="name" size="15" maxlength="50" /></td>
    </tr>
    <tr>
       <th>住所:</th>
       <td><input trype="text" name="address" size="35" maxlength="170" /></td>
    </tr> 
    <tr>
       <th>電話番号:</th>
       <td><input trype="text" name="tel" size="20" maxlength="20" /></td>
    </tr>
    <tr>
       <th>E-mail:</th>
       <td><input trype="text" name="mail" size="50" maxlength="100" /></td>
    </tr>
    <tr>
        <td colspan="2">
          <input type="submit" value="登録" />
          <input type="reset" value="クリア" />
        </td>
    </tr>
  </table>
  </form>
</body>
</html>

insMember.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("INSERT INTO memberDB(name, address, tel, mail) VALUES(" .
               $db->quote($_POST['name']) . "," .
               $db->quote($_POST['address']) . "," .
               $db->quote($_POST['tel']) . "," .
               $db->quote($_POST['mail']) . ")");
     header('Location: http://' . $_SERVER['HTTP_HOST'] .
                     dirname($_SERVER['PHP_SELF']) . '/insert_form.php');
  } catch (PDOException $e){
    print('エラー発生 : ' . $e->getMessage());
  }

?>

 

名前付きパラメータ
◆ここで、insMember.phpで別の方法でインサート処理しましょう
◆quoteメソッドによる処理を行う必要がなくコードをシンプルに記述できる

insMember.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);
    $stt = $db->prepare('INSERT INTO memberDB(name, address, tel, mail)
           VALUES(:name, :address, :tel, :mail )');

    $stt->bindParam(':name', $_POST['name'], PDO::PARAM_STR, 50);
    $stt->bindParam(':address', $_POST['address'], PDO::PARAM_STR, 150);
    $stt->bindParam(':tel', $_POST['tel'], PDO::PARAM_STR, 20);
    $stt->bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 100);
    $stt->execute();

    header('Location: http://' . $_SERVER['HTTP_HOST'] .
                     dirname($_SERVER['PHP_SELF']) . '/insert_form.php');
  } catch (PDOException $e){
    print('エラー発生 : ' . $e->getMessage());
  }

?>

 



 

 

記事メニュー
人気記事ランキング
目安箱バナー