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 | 入出力パラメータ |