PDO の紹介
PDO は、さまざまなデータベース (MySQL、MSSQL、Oracle、DB2、PostgreSQL...) のアクセス インターフェイスを統合する「データベース アクセス抽象化レイヤー」であり、異なるデータベース間で簡単に切り替えることができるため、データベース間の移植を簡単に実現できます。
PDOドライバー
PDOドライバーと対応するデータベースリストをサポート |
ドライバー名 |
対応するデータベースアクセス |
PDO_DBLIB |
FreeTDS/Microsoft SQL Server/Sybase |
PDO_FIREBIRD |
ファイアバード / Interbase 6 |
PDO_MYSQL |
MySQL |
PDO_OCI |
オラクル |
PDO_ODBC |
ODBC v3 |
PDO_PGSQL |
PostgreSQL |
PDO_SQLITE |
SQLite |
PDOのインストール
PDO は PHP 5.1 とともにリリースされました。つまり、5.1 より前のバージョンでは PDO がサポートされず、PHP が将来データベースを処理する際の第一の選択肢となります。
以下は PDO のインストールについて説明します:
1. Linux環境
Linux 環境で MySQL の PDO プログラム ドライバーのサポートを有効にするには、PHP (バージョン 5.1 以降) のソース コード パッケージをインストールするときに、configure コマンドに以下を追加する必要があります。
--with-pdo-mysql=/usr/local/mysql // "/usr/local/mysql" は MySQL サーバーのインストールディレクトリです
--with-pdo-mysql=/usr/local/mysql // "/usr/local/mysql" は MySQL サーバーのインストールディレクトリです
2. Windows環境
php.ini ファイルを次のように変更し、「;」(セミコロン:コメントを表します)を削除します。その前に!
;extension=php_pdo.dll // すべての PDO ドライバーによって共有される拡張子。これには
が必要です
;extension=php_pdo_mysql.dll // MySQL を使用するにはこの行を使用します
;extension=php_pdo_mssql.dll // MSSQL を使用するにはこの行を使用します
;extension=php_pdo.dll // すべての PDO ドライバーで共有される拡張子。これを含める必要があります
;extension=php_pdo_mysql.dll // MySQL を使用するにはこの行を使用します
;extension=php_pdo_mssql.dll // MSSQL を使用するにはこの行を使用します
php.ini ファイルを保存し、Apache サーバーを再起動し、phpinfo() 関数を確認します。次の図が表示されれば、インストールは成功です。
注: Windows 環境では、設定が成功せず、上記の画像が表示されない場合があります。この時点で、PHP インストール拡張機能内の php_pdo_mysql.dll、php_pdo.dll... およびその他のファイルを Windows のシステム インストール パスにコピーします。
PDO オブジェクトを作成する
PDOの構築手法のプロトタイプは以下の通りです:
__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]])
__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]]) パラメーターの説明:
1. dsn (データ ソース名): データ ソース名。使用するデータベースとドライバーを定義します。
a. MySQL データベースに接続するための DSN: mysql:host=localhost;dbname=test // ホスト名: localhost;
b. Oracle データベースに接続するための DSN: oci:dbname=//localhost:1521/test // ホスト名: localhost ポート: test
… DSN の詳細については、PHP マニュアルを参照してください
2. db_user: データベースのユーザー名
3. db_pwd: データベースのパスワード。
4. driver_options: 接続に必要なすべての追加オプションを指定するために使用される配列です
PDO は、接続に必要なすべての追加オプションを指定するために使用されます
オプション名
説明 | 説明
PDO::ATTR_AUTOCOMMIT |
PDO が自動送信機能をオフにするかどうかを決定し、オフにするには FALSE を設定します
|
PDO::ATTR_CASE |
PDO によって取得されたテーブルフィールド文字の大文字と小文字の変換を強制するか、列情報をそのまま使用します
|
PDO::ATTR_ERRMODE |
エラー処理モードを設定する
|
PDO::ATTR_PERSISTENT |
接続が永続的な接続かどうかを決定します。デフォルトは FALSE、永続的な接続ではありません
|
PDO::ATTR_ORACLE_NULLS |
返された空の文字列を SQL NULL に変換します
|
PDO::ATTR_PREFETCH |
アプリが事前に取得したデータサイズをKバイト単位で設定します
|
PDO::ATTR_TIMEOUT |
タイムアウトまでの待機時間を設定します (秒単位)
|
PDO::ATTR_SERVER_INFO |
データベース固有のサーバー情報が含まれます
|
PDO::ATTR_SERVER_VERSION |
データベースサーバーのバージョン番号に関連する情報が含まれます
|
PDO::ATTR_CLIENT_VERSION |
データベースクライアントのバージョン番号に関連する情報が含まれます
|
PDO::ATTR_CONNECTION_STATUS |
タイムアウトまでの待機時間を設定します (秒単位)
|
PDOコンストラクターを呼び出す(データベースに接続)
{ を試してください
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true));
} キャッチ (PDOException $e) {
exit('データベース接続に失敗しました。エラー メッセージ:'. $e->getMessage());
}
?>
試してみてください{
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true));
} キャッチ (PDOException $e) {
exit('データベース接続に失敗しました。エラー メッセージ:'. $e->getMessage());
}
?>
PDO オブジェクトのメンバーメソッド
PDO オブジェクトのメンバーメソッド
メソッド名
| 説明
説明
|
getAttribute()
「データベース接続オブジェクト」のプロパティを取得する |
|
setAttribute()
「データベース接続オブジェクト」のプロパティを設定する |
|
エラーコード()
エラーコードを取得する |
|
エラー情報()
エラーメッセージを取得する |
|
実行()
SQL ステートメントを処理し、影響を受ける行数を返します |
|
クエリ()
SQL ステートメントを処理し、「PDOStatement」オブジェクトを返します |
|
引用()
SQL の文字列に引用符を追加する |
|
lastInsertId()
テーブルに挿入された最後のデータの主キー値を取得します |
|
準備()
SQL ステートメントの実行準備を担当します |
|
getAvailableDrivers()
有効な PDO ドライブ名を取得する |
|
beginTransaction()
トランザクションを開始し、ロールバックの開始点をマークします |
|
コミット()
トランザクションを送信して SQL を実行する |
|
ロールバック()
トランザクションをロールバックする |
|
PDO を使用して SQL ステートメントを実行する
1. PDO::exec() メソッドを使用します
PDO::exec() メソッドは主に SQL の INSERT、UPDATE、DELETE で使用され、影響を受ける行の数を返します
Date_default_timezone_set('PRC');
header('Content-Type:text/html;Charset=utf-8');
{ を試してください
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // データベース接続を永続接続に設定します ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // セットアップでエラーがスローされます
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); // 文字列が空の場合に設定され、SQL で NULL に変換されます
$pdo->query('SET NAMES utf8') //データベースエンコーディングを設定します
} キャッチ (PDOException $e) {
exit('データベース接続エラー、エラー メッセージ:'. $e->getMessage());
}
$addTime = date('Y-m-d H:i:s', time());
$sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')";
$row = $pdo->exec($sql);
If ($row) {
echo '正常に追加されました' ;
} その他 {
「追加に失敗しました」をエコーします
}
?>
date_default_timezone_set('PRC');
header('Content-Type:text/html;Charset=utf-8');
試してみてください{
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); //データベース接続を永続接続として設定します
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // エラーをスローするように設定します
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); //文字列が空の場合に設定され、SQL で NULL に変換されます
$pdo->query('SET NAMES utf8') // データベースのエンコーディングを設定します
} キャッチ (PDOException $e) {
exit('データベース接続エラー、エラー メッセージ:'. $e->getMessage());
}
$addTime = date('Y-m-d H:i:s', time());
$sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')";
$row = $pdo->exec($sql);
if ($row) {
echo '正常に追加されました';
} その他 {
echo '追加に失敗しました';
}
?>
2. PDO::query() メソッドを使用します
PDO::query() メソッドは、SQL の SELECT クエリで使用されます。このメソッドが正常に実行されると、PDOStatement オブジェクトが返されます。 rowCount() メソッドを使用して、影響を受ける行の数を返します 。
header('Content-Type:text/html;Charset=utf-8');
{ を試してください
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // データベース接続を永続接続に設定します ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // セットアップでエラーがスローされます
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); // 文字列が空の場合に設定され、SQL で NULL に変換されます
$pdo->query('SET NAMES utf8') //データベースエンコーディングを設定します
} キャッチ (PDOException $e) {
exit('データベース接続エラー、エラー メッセージ:'. $e->getMessage());
}
$sql = "think_user からユーザー名、メールアドレス、年齢、追加時刻を選択";
{ を試してください
$result = $pdo->query($sql);
foreach ($result as $row) {
echo $row['userName'] . $row['email'] . "t" .$row['addTime'] ' ';
}
echo '合計'. $result->rowCount() .'Bar';
} キャッチ (PDOException $e) {
exit($e->getMessage());
}
?>
header('Content-Type:text/html;Charset=utf-8');
試してみてください{
$pdo = 新しい PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); //データベース接続を永続接続として設定します
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // エラーをスローするように設定します
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); //文字列が空の場合に設定され、SQL で NULL に変換されます
$pdo->query('SET NAMES utf8') // データベースのエンコーディングを設定します
} キャッチ (PDOException $e) {
exit('データベース接続エラー、エラー メッセージ:'. $e->getMessage());
}
$sql = "think_user からユーザー名、電子メール、年齢、追加時刻を選択";
試してみてください{
$result = $pdo->query($sql);
foreach ($result as $row) {
echo $row['userName'] . $row['email'] . "t" .$row['addTime'] ' ';
}
echo 'Total'. $result->rowCount() .'Bar';
} キャッチ (PDOException $e) {
exit($e->getMessage());
}
?>
準備されたステートメントの PDO サポート
Lee.さんのコラムより抜粋
http://www.bkjia.com/PHPjc/478465.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/478465.html
技術記事 PDO の概要 PDO は、さまざまなデータベース (MySQL、MSSQL、Oracle、DB2、PostgreSQL) のアクセス インターフェイスを統合する機能を備えており、異なるデータベース間で簡単に転送できます。
|