hitoshop14 @ ウィキ
データベース接続PDO編
最終更新:
hitoshop
データベース接続PDO編
- PDOを使用したPHPからmysqlの接続
- extension=php_pdo_dll を使用できるように、php.iniファイルを修正する必要がある
- データベースの抽象化で、急なサーバ変更時(mysql→postgreSqlなど)に大きくソース修正の必要無し
- PEAR::DBなど他にもDB抽象化レイヤーはあるが、それらに比べて処理速度が早い
| 基本的なフォーマット |
|
<?php |
PDOExceptionクラスの主なメソッド
| メソッド | 概要 |
| 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()); } ?> |
bindParamメソッドで指定できるデータ型
| 設定値 | 概要 |
| PDO::PARAM_NULL | NULL型 |
| PDO::PARAM_INT | 整数型 |
| PDO::PARAM_STR | 文字列型 |
| PDO::PARAM_LOB | オージオブジェクト型 |
| PDO::PARAM_STMT | SQLクエリ |
| PDO::PARAM_INPUT_OUTPUT | 入出力パラメータ |