ホームページ  >  記事  >  バックエンド開発  >  PHP5のPDOクラスの詳細説明

PHP5のPDOクラスの詳細説明

墨辰丷
墨辰丷オリジナル
2018-05-19 09:14:171605ブラウズ

この記事では主に PHP5 の PDO クラスの詳細な説明を紹介します。興味のある方はぜひ参考にしてください。

■PDOとは? POD (PHP Data Object) 拡張機能は PHP5 で追加されました。PHP6 では、データベースへの接続にデフォルトで PDO が使用されます。PHP6 では、PDO 以外の拡張機能がすべて削除されます。この拡張機能は、データベースにアクセスするための PHP 組み込みクラス PDO を提供し、異なるデータベースが同じメソッド名を使用してデータベース接続の不一致の問題を解決します。 Windows での開発用に構成しました。 ■PDO の目標は、さまざまな RDBMS ライブラリの共通機能を統合する、軽量で明確で便利な API を提供することですが、より高度な機能を排除するものではありません。
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があります。
;拡張子= 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 Firebird /Interbase 6
PDO_INFORMIX IBM Informix Dynamic Server
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 接続を分析します。


$dbms='mysql'; //データベース タイプ Oracle は ODI を使用します。開発者は別のデータベースを使用します。これを変更すると、多くの関数を覚える必要がなくなります
$host='localhost' //データベースホスト名
$dbName='test'; //データベース接続ユーザー名
; $pass=''; dsn, $user, $pass); //PDO オブジェクトの初期化とは、データベース接続オブジェクトの作成を意味します $dbh
echo "Connection success
";
/*検索を実行することもできますOperation

foreach ($dbh->query('Select * from FOO') as $row) {
using echo($GLOBAL);
} catch (PDOException $e) {
die ("エラー!: " . $e->getMessage() . "
");
}
//デフォルトでは、これは長くない接続です。長いデータベース接続が必要な場合は、最後のパラメータ: array(PDO::ATTR_PERSISTENT => true) は次のようになります:
$db = new PDO($dsn, $user, $pass, array(PDO:: ATTR_PERSISTENT => true));

?>


★データベースクエリ:
上記のクエリはすでに実行していますが、次のクエリも使用できます:
$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::ERRMODE_SILENT: エラー メッセージを表示しません。 、エラー コードのみを表示します。

PDO::ERRMODE_WARNING: 警告エラーを表示します。

PDO::ERRMODE_EXCEPTION: 例外をスローします。

PDO::ATTR_ORACLE_NULLS (ORACLE だけでなく、他のデータベースにも有効): )指定されたデータベースによって返される、php の NULL 値に対応する数値。

PDO::NULL_NATURAL: 変更なし。

PDO::NULL_EMPTY_STRING: 取得時に NULL が空の文字列に変換されます。 :ATTR_STATEMENT_CLASS: PDOStatement から派生したユーザー指定のステートメント クラスを設定します。永続的な PDO インスタンスでは使用できません。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() は主に記録された結果を返す操作、特に Select 操作に使用されます。
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() の Delete、Insert、および Update 操作の影響を受ける結果セットに使用されます。PDO::exec() には無効です。メソッドと選択操作。

関連する推奨事項:


PDO メソッドが mysql へのインジェクションを防止できる理由


PDO メソッドに基づいてデータベース操作の接続例を考える PHP フレームワーク

PHP での PDO トランザクション処理操作の例

以上がPHP5のPDOクラスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。