「データベース接続PDO編」の編集履歴(バックアップ)一覧はこちら
「データベース接続PDO編」(2008/11/02 (日) 05:35:19) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<h3>データベース接続PDO編</h3>
<ul><li>PDOを使用したPHPからmysqlの接続</li>
<li>extension=php_pdo_dll を使用できるように、php.iniファイルを修正する必要がある</li>
<li>データベースの抽象化で、急なサーバ変更時(mysql→postgreSqlなど)に大きくソース修正の必要無し</li>
<li>PEAR::DBなど他にもDB抽象化レイヤーはあるが、それらに比べて処理速度が早い</li>
</ul><table width="594" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>基本的なフォーマット</td>
</tr><tr><td>
<p><?php<br /><br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />
print('接続成功' . '<br />');<br />
$sql = 'select * from db';<br />
foreach ($db->query($sql) as $value){<br />
print($value['id'] . '<br />');<br />
print($value['name'] . '<br />');<br />
}<br />
}catch(PDOException $e){<br />
print('Error:' . $e->getMessage());<br />
die();<br />
}<br /><br />
$db = NULL;<br /><br />
?></p>
</td>
</tr></tbody></table><p><font size="4" color="#000080" style="background-color:rgb(255,204,153);"><1PDOExceptionクラスの主なメソッド</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">メソッド</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>getFile()</td>
<td>例外が発生したファイル名を取得</td>
</tr><tr><td>getLine()</td>
<td>例外が発生した行番号を取得</td>
</tr><tr><td>getCode()</td>
<td>エラーコードを取得</td>
</tr><tr><td>getMessage()</td>
<td>例外メッセージを取得</td>
</tr><tr><td>getTraceAsString()</td>
<td>バックトレースを文字列として取得</td>
</tr></tbody></table><p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">getAttribute / setAttribute
メソッドで参照/設定可能な接続パラメータ</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">定数</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>PDO::ATTR_AUTOCOMMIT</td>
<td>オートコミットを有効化(0 | 1)</td>
</tr><tr><td>PDO::ATTR_TIMEOUT</td>
<td>タイムアウト値</td>
</tr><tr><td>PDO::ATTR_ERRMODE</td>
<td>エラーモード</td>
</tr><tr><td> PDO::ERRMODE_SILENT</td>
<td>エラー出力を行わない</td>
</tr><tr><td> PDO::ERRMODE_WARNING</td>
<td>警告を出力</td>
</tr><tr><td> PDO::ERRMODE_EXCEPTION</td>
<td>PDOExceptionを発生</td>
</tr><tr><td>PDO::ATTR_SERVER_VERSION</td>
<td>サーバのバージョン</td>
</tr><tr><td>PDO::ATTR_CLIENT_VERSION</td>
<td>クライアントのバージョン</td>
</tr><tr><td>PDO::ATTR_SERVER_INFO</td>
<td>サーバ情報</td>
</tr><tr><td>PDO::ATTR_CONNECTION_STATUS</td>
<td>サーバへの接続状態</td>
</tr><tr><td>PDO::ATTR_CASE</td>
<td>カラム名を大文字/小文字に変換</td>
</tr><tr><td> PDO::CASE_LOWER</td>
<td>カラム名を小文字に変換</td>
</tr><tr><td> PDO::CASE_NATURAL</td>
<td>ドライバからの戻り値のまま</td>
</tr><tr><td> PDO::CASE_UPPER</td>
<td>カラム名を大文字に変換</td>
</tr><tr><td>PDO::ATTR_CURSOR_NAME</td>
<td>カーソル名</td>
</tr><tr><td>PDO::ATTR_ORACLE_NULLS</td>
<td>空文字をNULLに変換するか(0 | 1)</td>
</tr><tr><td>PDO::ATTR_PERSISTENT</td>
<td>接続的持続を有効にするか</td>
</tr></tbody></table><p> </p>
<p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">insert処理サンプル</font></p>
<table width="631" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>insert_form.php</td>
</tr><tr><td>
<p><html><br />
<head><title>メンバー登録</title></head><br />
<body><br />
<form method="post" action="insMember.php"><br />
<talbe border="0"><br />
<tr><br />
<th>名前:</th><br />
<td><input trype="text" name="name" size="15" maxlength="50"
/></td><br />
</tr><br />
<tr><br />
<th>住所:</th><br />
<td><input trype="text" name="address" size="35"
maxlength="170" /></td><br />
</tr> <br />
<tr><br />
<th>電話番号:</th><br />
<td><input trype="text" name="tel" size="20" maxlength="20"
/></td><br />
</tr><br />
<tr><br />
<th>E-mail:</th><br />
<td><input trype="text" name="mail" size="50" maxlength="100"
/></td><br />
</tr><br />
<tr><br />
<td colspan="2"><br />
<input type="submit" value="登録" /><br />
<input type="reset" value="クリア" /><br />
</td><br />
</tr><br />
</table><br />
</form><br />
</body><br />
</html></p>
</td>
</tr><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td>
</tr><tr><td><?php<br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />
$db->exec("INSERT INTO memberDB(name, address, tel, mail) VALUES(" .<br />
$db->quote($_POST['name']) . "," .<br />
$db->quote($_POST['address']) . "," .<br />
$db->quote($_POST['tel']) . "," .<br />
$db->quote($_POST['mail']) . ")");<br />
header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />
dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />
} catch (PDOException $e){<br />
print('エラー発生 : ' . $e->getMessage());<br />
}<br /><br />
?></td>
</tr></tbody></table><p> </p>
<p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">名前付きパラメータ</font><font size="4" color="#000080" style="background-color:rgb(255,204,153);"><br /></font>◆ここで、insMember.phpで別の方法でインサート処理しましょう<br />
◆quoteメソッドによる処理を行う必要がなくコードをシンプルに記述できる</p>
<table width="641" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td>
</tr><tr><td><?php<br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br /><font color="#000080"> $stt = $db->prepare('INSERT INTO memberDB(name,
address, tel, mail)<br />
VALUES(:name, :address, :tel, :mail )');<br /><br />
$stt->bindParam(':name', $_POST['name'], PDO::PARAM_STR, 50);<br />
$stt->bindParam(':address', $_POST['address'], PDO::PARAM_STR, 150);<br />
$stt->bindParam(':tel', $_POST['tel'], PDO::PARAM_STR, 20);<br />
$stt->bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 100);<br />
$stt->execute();</font><br />
header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />
dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />
} catch (PDOException $e){<br />
print('エラー発生 : ' . $e->getMessage());<br />
}<br /><br />
?></td>
</tr></tbody></table><p><br /><font size="4" color="#000080" style="background-color:rgb(255,204,153);">bindParamメソッドで指定できるデータ型</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">設定値</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>PDO::PARAM_NULL</td>
<td>NULL型</td>
</tr><tr><td>PDO::PARAM_INT</td>
<td>整数型</td>
</tr><tr><td>PDO::PARAM_STR</td>
<td>文字列型</td>
</tr><tr><td>PDO::PARAM_LOB</td>
<td>オージオブジェクト型</td>
</tr><tr><td>PDO::PARAM_STMT</td>
<td>SQLクエリ</td>
</tr><tr><td>PDO::PARAM_INPUT_OUTPUT</td>
<td>入出力パラメータ</td>
</tr></tbody></table><p> </p>
<p> </p>
<hr width="100%" size="2" /><hr width="100%" size="2" /><p> </p>
<p> </p>
<h3>データベース接続PDO編</h3>
<ul><li>PDOを使用したPHPからmysqlの接続</li>
<li>extension=php_pdo_dll を使用できるように、php.iniファイルを修正する必要がある</li>
<li>データベースの抽象化で、急なサーバ変更時(mysql→postgreSqlなど)に大きくソース修正の必要無し</li>
<li>PEAR::DBなど他にもDB抽象化レイヤーはあるが、それらに比べて処理速度が早い</li>
</ul><table width="594" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>基本的なフォーマット</td>
</tr><tr><td>
<p><?php<br /><br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />
print('接続成功' . '<br />');<br />
$sql = 'select * from db';<br />
foreach ($db->query($sql) as $value){<br />
print($value['id'] . '<br />');<br />
print($value['name'] . '<br />');<br />
}<br />
}catch(PDOException $e){<br />
print('Error:' . $e->getMessage());<br />
die();<br />
}<br /><br />
$db = NULL;<br /><br />
?></p>
</td>
</tr></tbody></table><p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">PDOExceptionクラスの主なメソッド</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">メソッド</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>getFile()</td>
<td>例外が発生したファイル名を取得</td>
</tr><tr><td>getLine()</td>
<td>例外が発生した行番号を取得</td>
</tr><tr><td>getCode()</td>
<td>エラーコードを取得</td>
</tr><tr><td>getMessage()</td>
<td>例外メッセージを取得</td>
</tr><tr><td>getTraceAsString()</td>
<td>バックトレースを文字列として取得</td>
</tr></tbody></table><p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">getAttribute / setAttribute
メソッドで参照/設定可能な接続パラメータ</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">定数</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>PDO::ATTR_AUTOCOMMIT</td>
<td>オートコミットを有効化(0 | 1)</td>
</tr><tr><td>PDO::ATTR_TIMEOUT</td>
<td>タイムアウト値</td>
</tr><tr><td>PDO::ATTR_ERRMODE</td>
<td>エラーモード</td>
</tr><tr><td> PDO::ERRMODE_SILENT</td>
<td>エラー出力を行わない</td>
</tr><tr><td> PDO::ERRMODE_WARNING</td>
<td>警告を出力</td>
</tr><tr><td> PDO::ERRMODE_EXCEPTION</td>
<td>PDOExceptionを発生</td>
</tr><tr><td>PDO::ATTR_SERVER_VERSION</td>
<td>サーバのバージョン</td>
</tr><tr><td>PDO::ATTR_CLIENT_VERSION</td>
<td>クライアントのバージョン</td>
</tr><tr><td>PDO::ATTR_SERVER_INFO</td>
<td>サーバ情報</td>
</tr><tr><td>PDO::ATTR_CONNECTION_STATUS</td>
<td>サーバへの接続状態</td>
</tr><tr><td>PDO::ATTR_CASE</td>
<td>カラム名を大文字/小文字に変換</td>
</tr><tr><td> PDO::CASE_LOWER</td>
<td>カラム名を小文字に変換</td>
</tr><tr><td> PDO::CASE_NATURAL</td>
<td>ドライバからの戻り値のまま</td>
</tr><tr><td> PDO::CASE_UPPER</td>
<td>カラム名を大文字に変換</td>
</tr><tr><td>PDO::ATTR_CURSOR_NAME</td>
<td>カーソル名</td>
</tr><tr><td>PDO::ATTR_ORACLE_NULLS</td>
<td>空文字をNULLに変換するか(0 | 1)</td>
</tr><tr><td>PDO::ATTR_PERSISTENT</td>
<td>接続的持続を有効にするか</td>
</tr></tbody></table><p> </p>
<p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">insert処理サンプル</font></p>
<table width="631" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>insert_form.php</td>
</tr><tr><td>
<p><html><br />
<head><title>メンバー登録</title></head><br />
<body><br />
<form method="post" action="insMember.php"><br />
<talbe border="0"><br />
<tr><br />
<th>名前:</th><br />
<td><input trype="text" name="name" size="15" maxlength="50"
/></td><br />
</tr><br />
<tr><br />
<th>住所:</th><br />
<td><input trype="text" name="address" size="35"
maxlength="170" /></td><br />
</tr> <br />
<tr><br />
<th>電話番号:</th><br />
<td><input trype="text" name="tel" size="20" maxlength="20"
/></td><br />
</tr><br />
<tr><br />
<th>E-mail:</th><br />
<td><input trype="text" name="mail" size="50" maxlength="100"
/></td><br />
</tr><br />
<tr><br />
<td colspan="2"><br />
<input type="submit" value="登録" /><br />
<input type="reset" value="クリア" /><br />
</td><br />
</tr><br />
</table><br />
</form><br />
</body><br />
</html></p>
</td>
</tr><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td>
</tr><tr><td><?php<br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />
$db->exec("INSERT INTO memberDB(name, address, tel, mail) VALUES(" .<br />
$db->quote($_POST['name']) . "," .<br />
$db->quote($_POST['address']) . "," .<br />
$db->quote($_POST['tel']) . "," .<br />
$db->quote($_POST['mail']) . ")");<br />
header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />
dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />
} catch (PDOException $e){<br />
print('エラー発生 : ' . $e->getMessage());<br />
}<br /><br />
?></td>
</tr></tbody></table><p> </p>
<p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">名前付きパラメータ</font><font size="4" color="#000080" style="background-color:rgb(255,204,153);"><br /></font>◆ここで、insMember.phpで別の方法でインサート処理しましょう<br />
◆quoteメソッドによる処理を行う必要がなくコードをシンプルに記述できる</p>
<table width="641" cellspacing="1" cellpadding="1" border="0"><tbody><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td>
</tr><tr><td><?php<br />
$dsn = 'mysql:dbname=testDB;host:localhost'; <font color="#339966">//testDBは任意</font><br />
$user = 'root'; <font color="#339966">//DB接続ユーザ名</font><br />
$password = ''; <font color="#339966">//DB接続用パスワード</font><br /><br />
try{<br />
$db = new PDO($dsn, $user, $password);<br />
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br /><font color="#000080"> $stt = $db->prepare('INSERT INTO memberDB(name,
address, tel, mail)<br />
VALUES(:name, :address, :tel, :mail )');<br /><br />
$stt->bindParam(':name', $_POST['name'], PDO::PARAM_STR, 50);<br />
$stt->bindParam(':address', $_POST['address'], PDO::PARAM_STR, 150);<br />
$stt->bindParam(':tel', $_POST['tel'], PDO::PARAM_STR, 20);<br />
$stt->bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 100);<br />
$stt->execute();</font><br />
header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />
dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />
} catch (PDOException $e){<br />
print('エラー発生 : ' . $e->getMessage());<br />
}<br /><br />
?></td>
</tr></tbody></table><p><br /><font size="4" color="#000080" style="background-color:rgb(255,204,153);">bindParamメソッドで指定できるデータ型</font></p>
<table width="588" cellspacing="1" cellpadding="1" border="0"><tbody><tr><td style="background-color:rgb(192,192,192);">設定値</td>
<td style="background-color:rgb(192,192,192);">概要</td>
</tr><tr><td>PDO::PARAM_NULL</td>
<td>NULL型</td>
</tr><tr><td>PDO::PARAM_INT</td>
<td>整数型</td>
</tr><tr><td>PDO::PARAM_STR</td>
<td>文字列型</td>
</tr><tr><td>PDO::PARAM_LOB</td>
<td>オージオブジェクト型</td>
</tr><tr><td>PDO::PARAM_STMT</td>
<td>SQLクエリ</td>
</tr><tr><td>PDO::PARAM_INPUT_OUTPUT</td>
<td>入出力パラメータ</td>
</tr></tbody></table><p> </p>
<p> </p>
<hr width="100%" size="2" /><hr width="100%" size="2" /><p> </p>
<p> </p>
表示オプション
横に並べて表示:
変化行の前後のみ表示: