hitoshop14 @ ウィキ

データベース接続PDO編

最終更新:

hitoshop

- view
管理者のみ編集可

データベース接続PDO編

  • PDOを使用したPHPからmysqlの接続
  • extension=php_pdo_dll を使用できるように、php.iniファイルを修正する必要がある
  • データベースの抽象化で、急なサーバ変更時(mysql→postgreSqlなど)に大きくソース修正の必要無し
  • PEAR::DBなど他にもDB抽象化レイヤーはあるが、それらに比べて処理速度が早い
基本的なフォーマット

<?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);
        print('接続成功' . '<br />');
        $sql = 'select * from db';
        foreach ($db->query($sql) as $value){
            print($value['id'] . '<br />');
            print($value['name'] . '<br />');
        }
    }catch(PDOException $e){
        print('Error:' . $e->getMessage());
        die();
    }

    $db = NULL;

?>

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>
<head><title>メンバー登録</title></head>
<body>
  <form method="post" action="insMember.php">
  <talbe border="0">
    <tr>
       <th>名前:</th>
       <td><input trype="text" name="name" size="15" maxlength="50" /></td>
    </tr>
    <tr>
       <th>住所:</th>
       <td><input trype="text" name="address" size="35" maxlength="170" /></td>
    </tr> 
    <tr>
       <th>電話番号:</th>
       <td><input trype="text" name="tel" size="20" maxlength="20" /></td>
    </tr>
    <tr>
       <th>E-mail:</th>
       <td><input trype="text" name="mail" size="50" maxlength="100" /></td>
    </tr>
    <tr>
        <td colspan="2">
          <input type="submit" value="登録" />
          <input type="reset" value="クリア" />
        </td>
    </tr>
  </table>
  </form>
</body>
</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 入出力パラメータ

 

  



 

 

記事メニュー
人気記事ランキング
目安箱バナー