ホームページ >php教程 >php手册 >PHP 入門レベルの PDO 基礎チュートリアル

PHP 入門レベルの PDO 基礎チュートリアル

WBOY
WBOYオリジナル
2016-06-13 12:05:27804ブラウズ

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 拡張機能が存在するディレクトリーです。 :php5ext の場合、この行を次のように変更します。

コードをコピー コードは次のとおりです。


extension_dir = "C :/ php5/ext"


次に、php.ini に移動して次を見つけます:

コードをコピー コードは次のとおりです。 :



;


以下に、extension=php_mbstring.dll のようなものがあります。最後に PDO を追加します:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql。 dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
;extension=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->e​​xec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
$ db = null
?>


$dsn = "mysql:host=localhost;dbname=test";

は DSN (データ ソース) を構築し、その中の情報を確認します: データベース タイプは mysql、ホスト アドレスは localhost 、データベース名は test という情報をいくつか紹介します。データベースごとにデータソースの構築方法が異なります。
$db = new PDO($dsn, 'root', '');

コンストラクターの最初のパラメーターはデータ ソースであり、2 番目のパラメーターは接続先です。サーバーのユーザー。3 番目のパラメータはパスワードです。接続が成功することは保証できません。例外については後で説明します。ここでは接続が成功したと仮定します。
$count = $db->e​​xec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()"); >正常に接続された PDO オブジェクトを呼び出してクエリを実行します。このクエリはレコードを挿入する操作です。PDO::exec() メソッドを使用すると、レコードに影響する結果が返されるため、この結果を出力します。最後に、オブジェクト リソースを終了する必要があります。
$db = null;

デフォルトでは、これは長い接続ではありません。データベースへの長い接続が必要な場合は、最後のパラメータ: array(PDO::ATTR_PERSISTENT => true) 次のようになります:
$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true)) ;

これは 1 つの操作と同じくらい簡単です。前のものと大きな違いはありませんが、ADOdb に似ています。

PDO 上級チュートリアル

データを抽出したい場合は、データ取得関数を使用する必要があります。 (以下で使用される $db は、上で接続されているすべてのオブジェクトです)



コードをコピー

コードは次のとおりです: < ?php

foreach($db->query("SELECT * FROM foo")){

print_r($row);


この取得方法も使用できます:


コードをコピー

コードは次のとおりです:

$ rs = $db->query("SELECT * FROM foo"); while($row = $rs->fetch()){

print_r($row); > }

?>


すべてのデータを一度に配列に取得したい場合は、次のようにすることができます:



code


コードは次のとおりです。

$rs = $db->query("SELECT * FROM foo"); $result_arr = $rs->fetchAll(); print_r($result_arr);

出力結果は次のとおりです。 🎜>
コードをコピー

コードは次のとおりです:


Array

([0] => Array(
[id] => 1
[0] => 1

[名前] => heiyeluren [性別] => 男性 [2] => 男性 [時間] => 2006-10-28 23:14:23 [3] => 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(); result_arr);
?>

上記のコードを見て、setAttribute () メソッドはいくつかの属性を設定します: PDO::ATTR_CASE、PDO::ATTR_ERRMODE など。ここで設定する必要があるのは PDO::ATTR_CASE です。つまり、関連付けられたインデックスを使用してデータ セットを取得する場合、関連付けられたインデックスは大文字または小文字になります。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() と同様

もちろん、一般的には PDO を使用します。 :FETCH_ASSOC。その他の取得タイプについては、マニュアルを参照してください。

上記のデータ取得方法に加えて、次の方法もあります:



コードをコピー

コードは次のとおりです:


$rs = $db->prepare("SELECT * FROM foo");
$rs->execute(); = $rs- >fetch()){
print_r($row)
}
?>
実際、ほぼ同じです。指定したレコードのフィールドの結果を取得したい場合は、PDOStatement::fetchColumn() を使用できます。

コードをコピー コードは次のとおりです:


$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn ();
echo $col;
?>


一般に、fetchColumn() はカウント統計や、単一フィールドのみを必要とする一部のレコードに使用されます。

簡単なまとめ
クエリ操作は主に 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 の簡単な理解としていくつかの入門知識について簡単に説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。