POD 拡張機能は PHP5 で追加されました。この拡張機能は、データベースにアクセスするための PHP 組み込みクラス PDO を提供し、一貫性のないデータベース接続の問題を解決します。
PDO の特徴:
パフォーマンス。 PDO は、既存のデータベースのスケーリングの成功と失敗について最初から学びました。 PDO のコードはまったく新しいため、PHP 5 の最新機能を活用するためにパフォーマンスをゼロから再設計する機会があります。
能力。 PDO は、RDBMS の固有の機能に簡単にアクセスできるようにしながら、基盤として一般的なデータベース機能を提供するように設計されています。
シンプルです。 PDO は、データベースの操作を簡単にするように設計されています。 API はコードに強制的に組み込まれることはなく、各関数呼び出しが何を行うのかを明確にします。
実行時に拡張可能。 PDO 拡張機能はモジュール式であるため、PHP プログラム全体を再コンパイルまたは再インストールすることなく、実行時にデータベース バックエンドのドライバーを読み込むことができます。たとえば、PDO_OCI 拡張機能は、PDO 拡張機能の代わりに Oracle データベース API を実装します。 MySQL、PostgreSQL、ODBC、Firebird 用のドライバーもあり、さらに多くのドライバーが開発中です。
PDO のインストール
PHP の phpinfo() 関数を通じて、PDO 拡張機能がインストールされているかどうかを確認できます。
1. Unix/Linux システムに PDO をインストールします
Unix または Linux では、次の拡張機能を追加する必要があります:
extension=pdo.so
2. Windows に pdo をインストールします
PDO とすべての主要なドライバーは次のとおりです。それらを有効にするには、php.ini ファイルを編集して次の拡張子を追加します:
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
Open php.ini を開き、上記のすべての行の前にあるセミコロンを削除します。
これらの構成を設定した後、PHP または Web サーバーを再起動する必要があります。
pdo を使用する例として mysql を取り上げてみましょう:
<?php$dbms='mysql'; //数据库类型$host='localhost'; //数据库主机名$dbName='test'; //使用的数据库$user='root'; //数据库连接用户名$pass=''; //对应的密码$dsn="$dbms:host=$host;dbname=$dbName";try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "连接成功<br/>"; /*你还可以进行一次搜索操作 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 } */ $dbh = null;} catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>");}//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));?>
pdo の詳細な紹介を見てみましょう:
1. 事前定義された定数:
PDO::PARAM_BOOL (整数) | はブールデータ型を表します。 |
PDO::PARAM_NULL (整数) | は、SQL の NULL データ型を表します。 |
PDO::PARAM_INT (integer) | は SQL の整数型を表します。 |
PDO::PARAM_STR (整数) | SQL の CHAR、VARCHAR、またはその他の文字列型を表します。 |
PDO::PARAM_LOB (整数) | SQL のラージ オブジェクト データ型を表します。 |
PDO::PARAM_STMT (整数) | レコードセット タイプを表します。現在、どのドライバーでもサポートされていません。 |
PDO::PARAM_INPUT_OUTPUT (整数) | ストアド プロシージャの INOUT パラメータとしてパラメータを指定します。この値は、明示的な PDO::PARAM_* データ型とビット単位の OR 演算する必要があります。 |
PDO::FETCH_LAZY (integer) | 取得方法を指定し、結果セットの各行をオブジェクトとして返します。このオブジェクトの変数名は列名に対応します。 PDO::FETCH_LAZY は、アクセス用のオブジェクト変数名を作成します。 PDOStatement::fetchAll() では無効です。 |
PDO::FETCH_ASSOC (integer) | 取得方法を指定し、対応する結果セットの各行を列名でインデックス付けされた配列として返します。結果セットに同じ名前の複数の列が含まれている場合、PDO::FETCH_ASSOC は列名ごとに 1 つの値のみを返します。 |
PDO::FETCH_NAMED (integer) | 取得方法を指定し、対応する結果セットの各行を列名でインデックス付けされた配列として返します。結果セットに同じ名前の複数の列が含まれている場合、PDO::FETCH_ASSOC は各列名の値を含む配列を返します。 |
PDO::FETCH_NUM (整数) | 取得方法を指定し、対応する結果セットの各行を列 0 から始まる列番号でインデックスされた配列として返します。 |
PDO::FETCH_BOTH (integer) | 取得方法を指定し、対応する結果セットの各行を列 0 から列番号と列名でインデックス付けされた配列として返します。 |
PDO::FETCH_OBJ (integer) | 取得方法を指定し、結果セットの各行を列名に対応する属性名を持つオブジェクトとして返します。 |
PDO::FETCH_BOUND (integer) | 取得メソッドを指定し、TRUEを返し、結果セットの列の値をPDOStatement::bindParam()またはPDOStatement::bindColumn()メソッドを通じてバインドされたPHP変数に割り当てます。 。 |
PDO::FETCH_COLUMN (整数) | 取得方法を指定し、結果セットの次の行から必要な列を返します。 |
PDO::FETCH_CLASS (integer) | 取得メソッドを指定し、要求されたクラスの新しいインスタンスを返し、クラス内の対応する属性名に列をマッピングします。 注: リクエストされたクラスに属性が存在しない場合、__set() マジック メソッドが呼び出されます |
PDO::FETCH_INTO (integer) | 取得方法を指定し、要求されたクラスの既存のインスタンスを更新し、クラス内の対応する属性名に列をマッピングします。 |
PDO::FETCH_FUNC (整数) | 実行時の完全にカスタマイズ可能なデータ処理を可能にします。 (PDOStatement::fetchAll() でのみ有効)。 |
PDO::FETCH_GROUP (整数) | 値のグループ化に従って返します。通常は PDO::FETCH_COLUMN または PDO::FETCH_KEY_PAIR とともに使用されます。 |
PDO::FETCH_UNIQUE (整数) | 一意の値のみを受け取ります。 |
PDO::FETCH_KEY_PAIR (integer) | 2 つの列を含む結果セットを配列に取得します。最初の列はキー名、2 番目の列は値です。 PHP 5.2.3 以降で利用可能です。 |
PDO::FETCH_CLASSTYPE (integer) | 最初の列の値に基づいてクラス名を決定します。 |
PDO::FETCH_SERIALIZE (整数) | PDO::FETCH_INTO に似ていますが、オブジェクトをシリアル化された文字列として表します。 PHP 5.1.0 以降で利用可能です。 PHP 5.3.0 以降、このフラグが設定されている場合、クラスのコンストラクターは呼び出されません。 |
PDO::FETCH_PROPS_LATE (整数) | プロパティを設定する前にコンストラクターを呼び出します。 PHP 5.2.0 以降で利用可能です。 |
PDO::ATTR_AUTOCOMMIT (integer) | この値が FALSE の場合、PDO はデータベース接続でトランザクションを開始するために自動コミットを無効にしようとします。 |
PDO::ATTR_PREFETCH (integer) | アプリケーションの速度とメモリ使用量のバランスをとるためにプリフェッチ サイズを設定します。すべてのデータベースとドライバーの組み合わせがプリフェッチ サイズの設定をサポートしているわけではありません。プリフェッチ サイズを大きくするとパフォーマンスが向上しますが、メモリの消費量も増加します。 |
PDO::ATTR_TIMEOUT (整数) | データベースへの接続のタイムアウト秒数を設定します。 |
PDO::ATTR_ERRMODE (integer) | この属性の詳細については、「エラーとエラー処理」セクションを参照してください。 |
PDO::ATTR_SERVER_VERSION (整数) | これは読み取り専用属性であり、PDO に接続されているデータベース サービスのバージョン情報を返します。 |
PDO::ATTR_CLIENT_VERSION (整数) | これは読み取り専用の属性であり、PDO ドライバーによって使用されるクライアント ライブラリのバージョン情報を返します。 |
PDO::ATTR_SERVER_INFO (整数) | これは読み取り専用の属性です。 PDO が接続されているデータベース サービスに関するメタ情報を返します。 |
PDO::ATTR_CONNECTION_STATUS (integer) | |
PDO::ATTR_CASE (integer) | 列名を指定された大文字と小文字に強制的に一致させるには、PDO::CASE_* のような定数を使用します。 |
PDO::ATTR_CURSOR_NAME (整数) | カーソルの名前を取得または設定します。スクロール可能なカーソルや位置指定された更新を使用する場合に非常に便利です。 |
PDO::ATTR_CURSOR (整数) | カーソルの種類を選択します。 PDO は現在、PDO::CURSOR_FWDONLY と PDO::CURSOR_SCROLL をサポートしています。スクロール可能なカーソルが実際に必要でない限り、通常は PDO::CURSOR_FWDONLY です。 |
PDO::ATTR_DRIVER_NAME (文字列) | ドライバー名を返します。 PDO::ATTR_DRIVER_NAME:を使用した例: <?phpif ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { echo "Running on mysql; doing something mysql specific here\n";}?> ログイン後にコピー |
PDO::ATTR_ORACLE_NULLS (integer) | 在获取数据时将空字符串转换成 SQL 中的 NULL 。 |
PDO::ATTR_PERSISTENT (integer) | 请求一个持久连接,而非创建一个新连接。关于此属性的更多信息请参见 连接与连接管理 。 |
PDO::ATTR_STATEMENT_CLASS (integer) | |
PDO::ATTR_FETCH_CATALOG_NAMES (integer) | 将包含的目录名添加到结果集中的每个列名前面。目录名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。 |
PDO::ATTR_FETCH_TABLE_NAMES (integer) | 将包含的表名添加到结果集中的每个列名前面。表名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。 |
PDO::ATTR_STRINGIFY_FETCHES (integer) | |
PDO::ATTR_MAX_COLUMN_LEN (integer) | |
PDO::ATTR_DEFAULT_FETCH_MODE (integer) | 自 PHP 5.2.0 起可用。 |
PDO::ATTR_EMULATE_PREPARES (integer) | 自 PHP 5.1.3 起可用。 |
PDO::ERRMODE_SILENT (integer) | 如果发生错误,则不显示错误或异常。希望开发人员显式地检查错误。此为默认模式。关于此属性的更多信息请参见 错误与错误处理 。 |
PDO::ERRMODE_WARNING (integer) | 如果发生错误,则显示一个 PHP E_WARNING 消息。关于此属性的更多信息请参见 错误与错误处理。 |
PDO::ERRMODE_EXCEPTION (integer) | 如果发生错误,则抛出一个 PDOException 异常。关于此属性的更多信息请参见 错误与错误处理。 |
PDO::CASE_NATURAL (integer) | 保留数据库驱动返回的列名。 |
PDO::CASE_LOWER (integer) | 强制列名小写。 |
PDO::CASE_UPPER (integer) | 强制列名大写。 |
PDO::NULL_NATURAL (integer) | |
PDO::NULL_EMPTY_STRING (integer) | |
PDO::NULL_TO_STRING (integer) | |
PDO::FETCH_ORI_NEXT (integer) | 在结果集中获取下一行。仅对可滚动游标有效。 |
PDO::FETCH_ORI_PRIOR (integer) | 在结果集中获取上一行。仅对可滚动游标有效。 |
PDO::FETCH_ORI_FIRST (integer) | 在结果集中获取第一行。仅对可滚动游标有效。 |
PDO::FETCH_ORI_LAST (integer) | 在结果集中获取最后一行。仅对可滚动游标有效。 |
PDO::FETCH_ORI_ABS (integer) | 根据行号从结果集中获取需要的行。仅对可滚动游标有效。 |
PDO::FETCH_ORI_REL (integer) | 根据当前游标位置的相对位置从结果集中获取需要的行。仅对可滚动游标有效。 |
PDO::CURSOR_FWDONLY (integer) | 创建一个只进游标的 PDOStatement 对象。此为默认的游标选项,因为此游标最快且是 PHP 中最常用的数据访问模式。 |
PDO::CURSOR_SCROLL (integer) | 创建一个可滚动游标的 PDOStatement 对象。通过 PDO::FETCH_ORI_* 常量来控制结果集中获取的行。 |
PDO::ERR_NONE (string) | 对应 SQLSTATE '00000',表示 SQL 语句没有错误或警告地成功发出。当用 PDO::errorCode() 或 PDOStatement::errorCode() 来确定是否有错误发生时,此常量非常方便。在检查上述方法返回的错误状态代码时,会经常用到。 |
PDO::PARAM_EVT_ALLOC (integer) | 分配事件 |
PDO::PARAM_EVT_FREE (integer) | 解除分配事件 |
PDO::PARAM_EVT_EXEC_PRE (integer) | 执行一条预处理语句之前触发事件。 |
PDO::PARAM_EVT_EXEC_POST (integer) | 执行一条预处理语句之后触发事件。 |
PDO::PARAM_EVT_FETCH_PRE (integer) | 从一个结果集中取出一条结果之前触发事件。 |
PDO::PARAM_EVT_FETCH_POST (整数) | 結果セットから結果を取得した後にイベントをトリガーします。 |
PDO::PARAM_EVT_NORMALIZE (整数) | バインディング パラメーターの登録時にドライバーが変数名を正規化できるようにするときに発生するイベント。 |