POD 拡張機能は PHP5 で追加されました。この拡張機能は、データベースにアクセスするための PHP の組み込みクラス PDO を提供し、一貫性のないデータベース接続の問題を解決します。
PDO の目標は、
軽量で明確で便利な API を提供すること
です。
より高度な機能を排除することなく、さまざまな RDBMS ライブラリに共通の機能を統合します。
PHP スクリプトを介して、オプションで高度な抽象化/互換性を提供します。
PDO の特徴:
パフォーマンス。 PDO は、既存のデータベースのスケーリングの成功と失敗について最初から学びました。 PDO のコードはまったく新しいため、PHP 5 の最新機能を活用するためにパフォーマンスをゼロから再設計する機会があります。
能力。 PDO は、RDBMS の固有の機能に簡単にアクセスできるようにしながら、基盤として一般的なデータベース機能を提供するように設計されています。
単純。 PDO は、データベースの操作を簡単にするように設計されています。 API はコードに強制的に組み込まれることはなく、各関数呼び出しが何を行うのかを明確にします。
実行時に拡張可能。 PDO 拡張機能はモジュール式であるため、PHP プログラム全体を再コンパイルまたは再インストールすることなく、実行時にデータベース バックエンドのドライバーを読み込むことができます。たとえば、PDO_OCI 拡張機能は PDO 拡張機能を置き換えて、Oracle データベース API を実装します。 MySQL、PostgreSQL、ODBC、Firebird 用のドライバーもあり、さらに多くのドライバーが開発中です。 [セパレータ]
PDOをインストールする
ここにあるのは、WINDOWS での開発用の PDO 拡張機能です。Linux でインストールして構成したい場合は、他の場所を探してください。
バージョン要件: php5.1 以降のバージョンはすでにパッケージに含まれています。php5.0.x は pecl.php.net からダウンロードして、PHP が存在するフォルダーの ext フォルダーにある拡張ライブラリに配置する必要があります。 ; マニュアルには、5.0 より前のバージョンでは PDO 拡張機能を実行できないと記載されています。構成:
pdo をサポートするように php.ini 設定ファイルを変更します (php.ini がわからない場合は、まず理解してください。phpinfo() 関数を呼び出すときに表示される php.ini を変更する必要があります。) extension= を変更します。 php_pdo .dll の前のセミコロンを削除します。セミコロンは php 設定ファイルのコメント記号です。この拡張子は必須です。他にもあります
;extension=php_pdo.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_informix.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
各拡張子に対応するデータベースは次のとおりです。
ドライバー名 サポートされているデータベース
PDO_DBLIB FreeTDS/Microsoft SQL Server/Sybase
PDO_FIREBIRD ファイアバード/Interbase 6
PDO_INFORMIX IBM Informix 動的サーバー
PDO_MYSQL MySQL 3.x/4.x
PDO_OCI Oracle コール・インターフェース
PDO_ODBC ODBC v3 (IBM DB2、unixODBC、および win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 および SQLite 2
どのデータベースを使用するかは、対応する拡張子の前にあるコメント記号「;」を削除するだけです。
PDOの使用
ここでは、mysql がインストールされていることを前提としています。そうでない場合は、まず mysql5.0.22 をインストールする方法を見つけてください。MySQL 4.0.26 を使用している人もそれを使用できます。
データベース接続:
次の例を使用して PDO 接続データベースを分析します。
<?php
$dbms='mysql'; //データベース タイプ oracle は ODI を使用します。開発者は、これを変更する限り、多くの関数を覚える必要はありません。
$host='localhost' //データベースのホスト名
$dbName='test' //使用するデータベース
$user='root' //データベース接続ユーザー名
$pass=''; // 対応するパスワード
$dsn="$dbms:host=$host;dbname=$dbName";
試す {
$dbh = new PDO($dsn, $user, $pass); //PDO オブジェクトの初期化とは、データベース接続オブジェクト $dbh の作成を意味します。
echo "接続が成功しました<br/>";
/*検索操作を実行することもできます
foreach ($dbh->query('Select * from FOO') as $row) {
print_r($row); //これらの値を確認するには echo($GLOBAL) を使用します。
}
*/
$dbh = null;
} キャッチ (PDOException $e) {
die ("エラー!: " . $e->getMessage() . "<br/>");
}
//デフォルトでは、これは長い接続ではありません。データベースへの長い接続が必要な場合は、最後にパラメータを追加する必要があります。array(PDO::ATTR_PERSISTENT => true) となります。
$db = 新しい PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
データベースクエリ:
上記のクエリはすでに実行していますが、次のクエリも使用できます。
<?php
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER); // 属性を設定します
$rs = $db->query("Select * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
上記では setAttribute() メソッドが使用されているため、フィールド名を強制的に大文字にするために 2 つのパラメータが入力されています。以下に、PDO::setAttribute() のパラメーターをリストします。 PDO::ATTR_CASE: 以下に詳述する形式で列名を強制します (2 番目のパラメーター)。
PDO::CASE_LOWER: 列名を強制的に小文字にします。
PDO::CASE_NATURAL: 列名は元の形式です
PDO::CASE_UPPER: 列名を強制的に大文字にします。
PDO::ATTR_ERRMODE: エラー メッセージ。
PDO::ERRMODE_SILENT: エラー情報は表示されず、エラー コードのみが表示されます。
PDO::ERRMODE_WARNING: 警告エラーを表示します。
PDO::ERRMODE_EXCEPTION: 例外をスローします。
PDO::ATTR_ORACLE_NULLS (ORACLE だけでなく、他のデータベースにも有効): ) データベースから返される NULL 値に対応する値を php で指定します。
PDO::NULL_NATURAL: 変更なし。
PDO::NULL_EMPTY_STRING: 空の文字列は NULL に変換されます。
PDO::NULL_TO_STRING: NULL は空の文字列に変換されます。
PDO::ATTR_STRINGIFY_FETCHES: 取得時に数値を文字列に変換します。 bool が必要です。
PDO::ATTR_STATEMENT_CLASS: PDOStatement から派生したユーザー指定のステートメント クラスを設定します。array(string classname, array(mixedconstructor_args)) が必要です。
PDO::ATTR_AUTOCOMMIT (OCI、Firebird、MySQL で利用可能): すべての単一ステートメントを自動コミットするかどうか。
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (MySQL で利用可能): バッファされたクエリを使用します。
この例の $rs->setFetchMode(PDO::FETCH_ASSOC); は PDOStatement::setFetchMode() であり、戻り値の型の宣言です。
以下のようなものがあります。
PDO::FETCH_ASSOC -- 連想配列形式
PDO::FETCH_NUM -- 数値インデックス配列形式
PDO::FETCH_BOTH -- どちらも配列形式で使用できます。これがデフォルトです。
PDO::FETCH_OBJ -- 前の mysql_fetch_object() と同様のオブジェクトの形式
戻り値の型宣言 (PDOStatement::メソッド名) については、マニュアルを参照してください。
データの挿入、更新、削除、
$db->exec("Delete FROM `xxxx_menu` where mid=43");
上記の操作を簡単に要約します。
クエリ操作は主に PDO::query()、PDO::exec()、PDO::prepare() です。
PDO::query() は主に、記録された結果を返す操作、特に選択操作に使用されます。
PDO::exec() は主に、挿入、更新、削除、その他の操作など、結果セットを返さない操作に使用されます。返される結果は、現在の操作によって影響を受ける列の数です。
PDO::prepare() は主に前処理操作です。前処理で SQL ステートメントを実行するには $rs->execute() を使用する必要があります。このメソッドはパラメータをバインドすることができ、この記事では簡単に説明できません。 . 全員 マニュアルやその他のドキュメントを参照できます。
結果セットを取得するための主な操作は、PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL() です。
PDOStatement::fetchColumn() は、フェッチ結果で指定された最初のレコードのフィールドです。デフォルトは最初のフィールドです。
PDOStatement::fetch() はレコードを取得するために使用されます。
PDOStatement::fetchAll() は、すべてのレコード セットを 1 つにまとめて結果を取得するために、PDOStatement::setFetchMode を通じて必要な結果セットのタイプを設定できます。
周囲の操作も 2 つあり、1 つは PDO::lastInsertId() と PDOStatement::rowCount() です。 PDO::lastInsertId() は最後の挿入操作を返し、主キー列の型は最後の自動インクリメント ID です。
PDOStatement::rowCount() は主に、PDO::query() および PDO::prepare() の削除、挿入、および更新操作の影響を受ける結果セットに使用され、PDO::exec() メソッドには無効ですそして操作を選択します。