PDO は、PHP 5 に追加された主要な新機能です。PHP 5 より前の php4/php3 には、php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite .dll など、各データベースに接続して処理するためのデータベース拡張機能が多数含まれていたためです。同様に、MySQL、PostgreSQL、MS SQL Server、SQLite に接続するには、ADOdb、PEAR::DB、PHPlib::DB などのデータベース抽象クラスを使用する必要がありますが、結局のところ、これは非常に面倒で非効率的です。 C/C++ で直接記述するほど PHP コードの効率が高くなるのはなぜでしょうか?したがって、PDO の登場は必然であり、誰もが冷静に学習する姿勢でその使用を受け入れる必要があります。おそらく、PDO によって多くの労力が節約されることがわかるでしょう。
PDO のインストール
私は Windows XP SP2 を使用しているため、プロセス全体が Windows 上で実行されます。Linux/FreeBSD およびその他のプラットフォームについては、自分でインストールをセットアップするための情報を見つけてください。
私のものは PHP 5.1.4 で、すでに php_pdo.dll 拡張機能が付属していますが、使用する前に少しセットアップが必要です。
私の PHP 設定ファイルである c:windowsphp.ini を開き、次の行を見つけます:
extension_dir
これは拡張機能が存在するディレクトリです。私の PHP 5 拡張機能は C:php5ext にあります。次に、これを変更します。
コードをコピーします コードは次のとおりです:
extension_dir = "C:/php5/ext"
次に、php.ini に移動して次の内容を見つけます:
コードをコピーします コードは次のとおりです:
;
以下に、PHP 拡張機能の読み込みの設定を示します。最後に:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
拡張子=php_pdo_firebird.dll
;拡張子= php_pdo_oci8.dll
各種PDO 追加できるドライバは全て追加されていますが、以下のphp_pdo_oci8.dllはOralceデータベースをインストールしていないためこれが無いのでセミコロンでコメントアウトしています。次に、Web サーバー、IIS/Apache を再起動します。私の場合は IIS です。おい、あなたは私を見下しています。Windows では簡単です。再起動後、Web サーバーのドキュメント ディレクトリに phpinfo.php ファイルを作成し、以下を追加します:
コードをコピーします コードは次のとおりです:
<
phpinfo()?> ;
出力内容をスムーズに見ることができれば:
PDO
PDO サポートが有効
PDO ドライバー mysql、pgsql、sqlite、mssql、odbc、firebird
後ろにさまざまなドライバー命令があります: PDO_Firebird、pdo_mssql、 pdo_mysql、PDO_ODBC、pdo_pgsql、pdo_sqlite。インストールが成功しましたら、おめでとうございます。そうでない場合は、上記の手順を注意深く確認してください。
PDO チュートリアル
私は MySQL 4.0.26 を使用していますが、個人的には MySQL 4.1.x または MySQL 5.0.x を使用することをお勧めします。これらのバージョンには学ぶ価値のある興味深いことがたくさんあるからです。 PDO が接続する必要があるのは MySQL 4.0 です。MySQL をインストールしていない場合は、自分でインストールしてください。 MySQL を確立し、id、名前、性別、時刻の 4 つのフィールドを含むテーブル foo をテスト ライブラリに追加しました。
最初の PDO アプリケーションの構築を開始し、Web ドキュメント ディレクトリに pdo.php ファイルを作成します。
コードをコピーします コードは次のとおりです:
$dsn = " mysql:host= localhost;dbname=test";
$db = new PDO($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren' ,gender=' 男性',time=NOW()");
エコー $count;
$db = null;
?>
$dsn = "mysql:host=localhost;dbname=test";
は DSN (データ ソース) を構築し、その中の情報を確認します: データベース タイプは mysql、ホスト アドレスは localhost、データベース名テストです。いくつかの情報です。データベースごとにデータソースの構築方法が異なります。
$db = new PDO($dsn, 'root', '');
コンストラクターの最初のパラメーターはデータ ソース、2 番目はデータベース サーバーに接続するユーザー、3 番目は PDO オブジェクトを初期化します。最初のパラメータはパスワードです。接続が成功することは保証できません。例外については後で説明します。ここでは接続が成功したと仮定します。
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count
正常に接続された PDO オブジェクトを呼び出します。クエリを実行すると、このクエリはレコードを挿入する操作です。PDO::exec() メソッドを使用すると、レコードに影響を与える結果が返されるため、この結果を出力します。最後に、オブジェクト リソースを終了する必要があります:
$db = null;
デフォルトでは、これは長い接続ではありません。データベースへの長い接続が必要な場合は、最後のパラメータ array(PDO) を追加する必要があります。 ::ATTR_PERSISTENT => true)、これは次のようになります:
$ db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));操作は 1 つだけで、以前のものとあまり変わらないかもしれませんが、ADOdb とは少し異なります。
高度な PDO チュートリアル
データを抽出したい場合は、データ取得関数を使用する必要があります。 (以下で使用している$dbは上で接続されているすべてのオブジェクトです)
コードをコピー コードは次のとおりです:
foreach($db->query("SELECT * FROM foo" ; $db->query("SELECT * FROM foo");
while($row = $rs->fetch()){
print_r($row);
}
?>
一度実行したい場合は、次のようにすべてのデータを配列に取得できます:
コードをコピーします コードは次のとおりです:
$rs = $db-> ;query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
?> 出力結果は次のとおりです。コード
コードは次のとおりです:
Array
([0] = > Array(
[id] => 1
[0] => 1 [name] => heiyeluren [ 1] => ヘイエルレン [性別] => 男性 [時間] => 2006-10- 28 23:14:23
)
}
中のレコードと数値を見てみましょう インデックスと関連インデックスの両方がありますが、これはリソースの無駄です 関連インデックスのみが必要です:
コードをコピーします。
コードは次のとおりです:
$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() メソッドは、いくつかの属性を設定します。主な属性は、PDO::ATTR_CASE、PDO::ATTR_ERRMODE などです。ここで設定する必要があるのは、関連するインデックスを使用してデータを取得する場合の PDO::ATTR_CASE です。 set では、関連付けられたインデックスが大文字か小文字かについていくつかのオプションがあります:
PDO::CASE_LOWER -- 列名を強制的に小文字にする
PDO::CASE_NATURAL -- 列名 元のメソッドに従って
PDO::CASE_UPPER -- 列名を強制的に大文字にする
setFetchMode メソッドを使用して、結果セットを取得するための戻り値の型を設定します。同じ型もあります:
PDO::FETCH_ASSOC -- 連想配列形式
PDO::FETCH_NUM。 -- 数値インデックス配列形式
PDO::FETCH_BOTH -- 両方の配列形式が使用可能で、これがデフォルトです
PDO::FETCH_OBJ -- 前の mysql_fetch_object() と同様のオブジェクト形式で
もちろん、一般的には、他の取得タイプについては、マニュアルを参照してください。 上記のデータ取得方法に加えて、次の方法もあります:
コードをコピーします
コードは次のとおりです:
$rs = $db->prepare("SELECT * FROM foo");
$rs->execute();
while($row = $rs->fetch()) {
print_r($row);
?>
実際には、ほぼ同じです。指定したレコードのフィールドの結果を取得したい場合は、PDOStatement::fetchColumn() を使用できます:
コードをコピーします コードは次のとおりです:
$rs = $db->query( "SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
echo $col;
カウント統計や一部のみが必要な場合は、単一フィールドのレコードの操作が簡単です。
簡単なまとめ
クエリ操作は主に PDO::query()、PDO::exec()、PDO::prepare() です。 PDO::query() は主に、記録された結果を返す操作、特に SELECT 操作に使用されます。PDO::exec() は主に、INSERT、UPDATE、DELETE などの結果セットを返さない操作に使用されます。結果は、現在の操作によって影響を受ける列の数を返します。 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() メソッドには無効ですおよび SELECT 操作。
上記の使用法から、PDO が確かに強力であることがわかります。バインド パラメーター、前処理、ストアド プロシージャ、トランザクション処理、その他の関数など、他にも言及していない機能があります。さらに、Oracle データベース自体にはさまざまなデータ拡張構造があり、詳細な学習と理解を必要とする特殊な機能が多数あります。この記事では、PDO の簡単な理解としていくつかの入門知識について簡単に説明します。
http://www.bkjia.com/PHPjc/324301.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/324301.html技術記事 PDO は PHP 5 に追加された主要な新機能です。PHP 5 より前の php4/php3 には、php_mysql.dll、php_pgsql など、各データベースに接続して処理するためのデータベース拡張機能が多数含まれていたためです。