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