「データベース接続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>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />         print('接続成功' . '&lt;br /&gt;');<br />         $sql = 'select * from db';<br />         foreach ($db-&gt;query($sql) as $value){<br />             print($value['id'] . '&lt;br /&gt;');<br />             print($value['name'] . '&lt;br /&gt;');<br />         }<br />     }catch(PDOException $e){<br />         print('Error:' . $e-&gt;getMessage());<br />         die();<br />     }<br /><br />     $db = NULL;<br /><br /> ?&gt;</p> </td> </tr></tbody></table><p><font size="4" color="#000080" style="background-color:rgb(255,204,153);">&lt;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>&lt;html&gt;<br /> &lt;head&gt;&lt;title&gt;メンバー登録&lt;/title&gt;&lt;/head&gt;<br /> &lt;body&gt;<br />   &lt;form method=&quot;post&quot; action=&quot;insMember.php&quot;&gt;<br />   &lt;talbe border=&quot;0&quot;&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;名前:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;name&quot; size=&quot;15&quot; maxlength=&quot;50&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;住所:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;address&quot; size=&quot;35&quot; maxlength=&quot;170&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt; <br />     &lt;tr&gt;<br />        &lt;th&gt;電話番号:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;tel&quot; size=&quot;20&quot; maxlength=&quot;20&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;E-mail:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;mail&quot; size=&quot;50&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />         &lt;td colspan=&quot;2&quot;&gt;<br />           &lt;input type=&quot;submit&quot; value=&quot;登録&quot; /&gt;<br />           &lt;input type=&quot;reset&quot; value=&quot;クリア&quot; /&gt;<br />         &lt;/td&gt;<br />     &lt;/tr&gt;<br />   &lt;/table&gt;<br />   &lt;/form&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;</p> </td> </tr><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td> </tr><tr><td>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />     $db-&gt;exec(&quot;INSERT INTO memberDB(name, address, tel, mail) VALUES(&quot; .<br />                $db-&gt;quote($_POST['name']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['address']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['tel']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['mail']) . &quot;)&quot;);<br />      header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />                      dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />   } catch (PDOException $e){<br />     print('エラー発生 : ' . $e-&gt;getMessage());<br />   }<br /><br /> ?&gt;</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>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br /><font color="#000080">    $stt = $db-&gt;prepare('INSERT INTO memberDB(name, address, tel, mail)<br />            VALUES(:name, :address, :tel, :mail )');<br /><br />     $stt-&gt;bindParam(':name', $_POST['name'], PDO::PARAM_STR, 50);<br />     $stt-&gt;bindParam(':address', $_POST['address'], PDO::PARAM_STR, 150);<br />     $stt-&gt;bindParam(':tel', $_POST['tel'], PDO::PARAM_STR, 20);<br />     $stt-&gt;bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 100);<br />     $stt-&gt;execute();</font><br />     header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />                      dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />   } catch (PDOException $e){<br />     print('エラー発生 : ' . $e-&gt;getMessage());<br />   }<br /><br /> ?&gt;</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>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />         print('接続成功' . '&lt;br /&gt;');<br />         $sql = 'select * from db';<br />         foreach ($db-&gt;query($sql) as $value){<br />             print($value['id'] . '&lt;br /&gt;');<br />             print($value['name'] . '&lt;br /&gt;');<br />         }<br />     }catch(PDOException $e){<br />         print('Error:' . $e-&gt;getMessage());<br />         die();<br />     }<br /><br />     $db = NULL;<br /><br /> ?&gt;</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>&lt;html&gt;<br /> &lt;head&gt;&lt;title&gt;メンバー登録&lt;/title&gt;&lt;/head&gt;<br /> &lt;body&gt;<br />   &lt;form method=&quot;post&quot; action=&quot;insMember.php&quot;&gt;<br />   &lt;talbe border=&quot;0&quot;&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;名前:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;name&quot; size=&quot;15&quot; maxlength=&quot;50&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;住所:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;address&quot; size=&quot;35&quot; maxlength=&quot;170&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt; <br />     &lt;tr&gt;<br />        &lt;th&gt;電話番号:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;tel&quot; size=&quot;20&quot; maxlength=&quot;20&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />        &lt;th&gt;E-mail:&lt;/th&gt;<br />        &lt;td&gt;&lt;input trype=&quot;text&quot; name=&quot;mail&quot; size=&quot;50&quot; maxlength=&quot;100&quot; /&gt;&lt;/td&gt;<br />     &lt;/tr&gt;<br />     &lt;tr&gt;<br />         &lt;td colspan=&quot;2&quot;&gt;<br />           &lt;input type=&quot;submit&quot; value=&quot;登録&quot; /&gt;<br />           &lt;input type=&quot;reset&quot; value=&quot;クリア&quot; /&gt;<br />         &lt;/td&gt;<br />     &lt;/tr&gt;<br />   &lt;/table&gt;<br />   &lt;/form&gt;<br /> &lt;/body&gt;<br /> &lt;/html&gt;</p> </td> </tr><tr style="background-color:rgb(204,255,204);"><td>insMember.php</td> </tr><tr><td>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br />     $db-&gt;exec(&quot;INSERT INTO memberDB(name, address, tel, mail) VALUES(&quot; .<br />                $db-&gt;quote($_POST['name']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['address']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['tel']) . &quot;,&quot; .<br />                $db-&gt;quote($_POST['mail']) . &quot;)&quot;);<br />      header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />                      dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />   } catch (PDOException $e){<br />     print('エラー発生 : ' . $e-&gt;getMessage());<br />   }<br /><br /> ?&gt;</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>&lt;?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-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br /><font color="#000080">    $stt = $db-&gt;prepare('INSERT INTO memberDB(name, address, tel, mail)<br />            VALUES(:name, :address, :tel, :mail )');<br /><br />     $stt-&gt;bindParam(':name', $_POST['name'], PDO::PARAM_STR, 50);<br />     $stt-&gt;bindParam(':address', $_POST['address'], PDO::PARAM_STR, 150);<br />     $stt-&gt;bindParam(':tel', $_POST['tel'], PDO::PARAM_STR, 20);<br />     $stt-&gt;bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 100);<br />     $stt-&gt;execute();</font><br />     header('Location: http://' . $_SERVER['HTTP_HOST'] .<br />                      dirname($_SERVER['PHP_SELF']) . '/insert_form.php');<br />   } catch (PDOException $e){<br />     print('エラー発生 : ' . $e-&gt;getMessage());<br />   }<br /><br /> ?&gt;</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>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
人気記事ランキング
目安箱バナー