ホームページ >バックエンド開発 >PHPチュートリアル >adodb.recordset php adodbの概要
PHP は Web システムを構築するための強力なツールですが、データベースにアクセスする PHP の機能は標準化されておらず、各データベースは異なる互換性のないアプリケーション プログラミング インターフェイス (API) を使用しています。このギャップを埋めるためにADODBが登場しました。データベースにアクセスするためのインターフェースが標準化されると、さまざまなデータベース間の違いが隠蔽され、他の異なるデータベースへの切り替えが非常に簡単になります。
現時点での ADODB の最新バージョンは V4.62 で、MySQL、PostgreSQL、Interbase、Informix、Oracle、MS SQL 7、Foxpro、Access、ADO、Sybase、DB2、一般的な ODBC など、多くの種類のデータベースをサポートしています。 (PostgreSQL、Informix、および Sybase ドライバーを含む) は、フリー ソフトウェア コミュニティの開発によって提供されています。
ADODB を使用する最大の利点の 1 つは、バックエンド データベースに関係なく、データベースへのアクセス方法が同じであることです。開発者と設計者は、特定のデータベース セットに対して別の一連の異なるアクセス方法を学習する必要がありません。これにより、データベース プラットフォームを移行する際に、過去の知識を引き続き使用することができ、開発者の知識の負担が大幅に軽減されます。
実際、ADODB の開発コンセプトは ADODB よりも先に登場したものではありません。DBI は、データベースにアクセスする際の一貫した API 呼び出しインターフェイスを Perl に提供します。 Perl + DBI を使用したことのある友人は、ADODB を再度使用すると、親しみを感じると思います。
また、ADODBはASPを使ったことがある人には馴染みがあるはずで、そのような友達はADODBを簡単に受け入れることができるはずです。
Adodb 公式: http://adodb.sourceforge.net/
PHP は最小限の労力で最も楽しく動的な Web サイトを構築できます。動的な Web サイトを構築するには、データベースを使用してログイン アカウント情報を取得し、動的なニュースを公開する必要があります。 , フォーラムの記事を保存します。 あなたの会社は、利用可能な最も汎用性の高い MySQL データを使用して、あなたの Web サイトを想像以上に有名にする素晴らしい仕事をしました。その後、MySQL が実際のワークロードに対処できなくなったこともわかり、データベース システムを置き換える時期が来ました。
残念ながら、PHP でのすべてのデータベース アクセスは若干異なります。 MySQL に接続するには、mysql_connect() を使用します。Oracle または Microsoft SQL Server にアップグレードする場合は、それぞれ ocilogon() または mssql_connect() を使用する必要があります。さらに悪いことに、リンクごとに使用されるパラメータも異なるということです。
諦めないでください
プログラムの移植性を確保する必要がある場合、ADODB と呼ばれるデータベース パッケージ リンク ライブラリが登場しました。サポートされているすべてのデータベースと通信するための共通 API が提供されるため、諦める必要はありません。
ADODB は Active Data Object Database の略称です (申し訳ありませんが、コンピューターをプレイする人は、あまり独創的ではない場合があります)。 ADODB は現在、MySQL、PostgreSQL、Oracle、Interbase、Microsoft SQL Server、Access、FoxPro、Sybase、ODBC、および ADO をサポートしています。ADODB は http://php.weblogs.com/adodb からダウンロードできます。
MySQL の例
PHP で最も一般的なデータベースは MySQL なので、次のプログラム コードが気に入ると思います。データベース名は mydab で、SQL select コマンド クエリを実行します。一枚ずつ印刷していきます。
$db = mysql_connect("localhost", "root", "パスワード");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM 従業員",$db); $result === false) die("失敗");
while ($fields = mysql_fetch_row($result)) {
for ($i=0, $max=sizeof($fields); $i print $fields[$i].';
print "
n";
上記のプログラムコードは色分けされており、最初のセグメントはリンクされた部分です。 2 番目の段落では SQL コマンドを実行し、最後の段落ではフィールドを表示します。while ループは結果の各列をスキャンし、for ループは各列のフィールドをスキャンします。
次のステップでは、ADODB プログラム コードを使用して同じ結果を取得します。
include("adodb.inc.php");
$db->Connect("localhost") ", " root", "password", "mydb");
$result = $db->Execute("SELECT * FROM 従業員");
if ($result === false) die("失敗") ;
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i print $result-> field[$ i].';
$result->MoveNext();
print "
n";
これで、Oracle データベースを指すように変更されました。 NewADOConnection('oracle') になるプログラム コードです。完全なプログラム コードを見てみましょう...
データベースに接続します
include("adodb.inc.php")
$db = NewADOConnection('mysql'); ;
$db->Connect("localhost" , "root", "password", "mydb");
より洗練される必要があるため、リンクされたプログラム コードは元の MySQL プログラム コードよりも洗練されています。 ADODB では、オブジェクト指向のアプローチを使用してさまざまなデータベースの複雑さを管理し、さまざまなクラスを使用してさまざまなデータベースを制御します。オブジェクト指向プログラミングが初めてでも、心配する必要はありません。複雑なことはすべて NewADOConnection() 関数の背後に隠されています。
メモリを節約するために、接続しているデータベースに関連する PHP プログラム コードのみをロードします。これは、Mysql、mssql、oracle、oci8、postgres、sybase、vfp などの NewADOConnection(databaseddriver) を呼び出して行います。 、access、ibase、その他多くのドライバー。
次に、NewADOConnection() を呼び出して接続クラスから新しいオブジェクト エンティティを生成し、最後に $db->Connect() を使用してデータベースに接続します。
SQL 命令を実行する
$result = $db->Execute("SELECT * FROM 従業員");
if ($result === false) die("failed");
SQL 命令をサーバーに直接送信する成功しました 実行後、Execute() はレコードセット オブジェクトを返し、上記の $result を確認できます。
初心者にとって混乱しやすい問題は、ADODB には接続オブジェクトとレコードセット オブジェクトという 2 種類のオブジェクトがあり、これらのオブジェクトをいつ使用するかということです。
接続オブジェクト ($db) は、データベースへの接続と SQL クエリのフォーマットを担当します。レコードセット オブジェクト ($result) は、結果を取得し、応答データをテキストまたは配列に正規化する役割を果たします。
唯一付け加えたいのは、ADODB には、INSERT 命令と UPDATE 命令を簡単にするための便利な関数が多数用意されているということです。これについては、上級の章で説明します。
データを取得
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i print $result - >fields[$i].';
$result->MoveNext();
print "
n";
データをファイルから読み取る例は、各行で最初にファイルの終わり (EOF) に到達したかどうかを確認し、到達していない場合は、各列のフィールドをループしてから次の行に移動し (MoveNext)、同じことを繰り返します。
$result->fields[] 配列は PHP データベース拡張システムによって生成されます。一部のデータベース拡張システムでは、配列に名前でインデックスを付けるように強制するには、ユニバーサル $ADODB_FETCH_MODE 変数を使用します。
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute('select * from table');
$ADODB_FETCH_MODE = $db->Execute('select * from table');
print_r($rs1->fields); // array([0]=>'v0',[1] =>'v1') を表示します
print_r($rs2->fields); array(['col1']=>'v0',['col2'] =>'v1')
上記の例でわかるように、2 つのレコードセットが保存され、レコードセットが異なるアクセス モードを使用します。 Execute() が生成された後、$ADODB_FETCH_MODE を設定します。
ADOConnection
データベースに接続されているオブジェクト。SQL コマンドを実行し、相関コマンドや日付形式コマンドなどの SQL コマンドを標準形式にする一連のツール関数を備えています。
その他の便利な関数
$recordset->Move($pos) は、現在のデータ列をスクロールします。ADODB はデータベース全体の前方スクロールをサポートしていますが、一時的なものを使用できるため、これは問題ありません。逆スクロールをシミュレートするためにレコードをキャッシュします。
$recordset->RecordCount() は、SQL コマンドによってアクセスされたレコードの数を返します。一部のデータベースは、それをサポートしていないため、-1 を返します。
$recordset->GetArray() は結果を配列の形式で返します。
rs2html($recordset) 関数は、渡されたレコードセットを HTML テーブル形式に変換します。次の例では、関連する使用法が太字で示されています。
include('adodb.inc.php');
include('tohtml.inc.php'); /* rs2html 関数が含まれます */
$conn = &ADONewConnection(' mysql');
$conn->PConnect('localhost','userid','password','database');
$rs = $conn->Execute('select * from table'); ($rs); /* Recordset to HTML table */
ファイルには他にも多くの便利な関数がリストされており、次の URL で見つけることができます: http://php.weblogs.com/adodb_manual
高度なトピック
追加そして更新します
次のデータをデータベースに追加するとします。
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 2001 年 8 月 31 日 */
Note= Sugar なぜ中止しないのですか
別のデータベースに切り替えると、新しいデータを追加する方法はありません。
最初の問題は、各データベースが異なるデフォルトの日付形式を使用するのに対し、他のデータベースは異なるデフォルトの日付形式を変換する DBDate() 関数を備えていることです。 。
次の問題は、一重引用符の表現です (使用しないでください)。MySQL では一重引用符を直接使用できますが、Sybase、Access、Microsoft SQL Server などの他のデータベースでは、2 つの一重引用符は使用できません。 qstr() 関数を使用すると (使用しないでください)、この問題を解決できます。
これらの機能はどのように使用しますか?次のように:
$sql = "INSERT INTO table (id, thedate,note) names ("
. $ID . ','
. $db->DBDate($TheDate) .','
. $ db ->qstr($Note).")";
$db->Execute($sql);
ADODB には、最後の更新によって影響を受けたデータを返す $connection->Affected_Rows() 関数もあります。または delete コマンド 列数、および $recordset->Insert_ID() 関数は、insert コマンドによって自動的に生成された最後のデータ列番号を返します。これら 2 つの関数を提供するデータベースは存在しないことに注意してください。
MetaTypes
レコードセット メソッド FetchField($fieldoffset) を通じてオブジェクトの 3 つの属性 (name、type、max_length) を返すことで、フィールドに関する詳細情報を取得できます。
例:
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
$f0->name の内容は 'adata ' , $f0->type は 'date' になり、max_length が不明な場合、その内容は -1 になります。
異なるデータベースを扱う際の問題の 1 つは、各データベースが同じデータ型に対して異なる名前を持っていることです。たとえば、タイムスタンプ型は、あるデータベースでは datetime と呼ばれ、別のデータベースでは time と呼ばれるため、ADODB は MetaType( $type,$max_length を提供します。 ) 次のデータ型を正規化する関数:
C: 文字型および varchar 型
X: テキストまたは長い文字 (例: 幅 255 バイトを超える)
B: BLOB またはバイナリ イメージ
D: 日付
T: タイムスタンプ
L : 論理 (ブール値)
I: 整数
N: 数値 (float、double、money)
前の例では、
$recordset = $conn->Execute("select adate from table" ); Recordset->FetchField(0);
$type = $recordset->MetaType($f0->type, $f0->max_length); /* 'D' を出力する必要があります */
Select コマンドの Limit と Top のサポート
ADODB には $connection->SelectLimit($sql,$nrows,$offset) 関数があり、これを使用してレコードセットの部分的なコレクションを取得できます。これは Microsoft 製品から採用されています。 、および PostgreSQL および MySQL での SELECT...LIMIT の使用法の利点について説明します。元のデータベースがこの使用法を提供していない場合でも、この関数はこの使用法をシミュレートして提供します。
キャッシュ サポート
ADODB を使用すると、レコードセット データをファイル システムに一時的に保存し、$connection->CacheExecute($ secs2cache,$sql) および $connection->CacheSelectLimit($secs2cache,$sql, $ nrows、$offset) などの設定された時間間隔に達すると、時間を節約するために実際にデータベースにクエリを実行します。
PHP4 セッションのサポート
ADODB は PHP4 セッション ハンドラーもサポートしています。関連する機能については、http://php.weblogs.com/adodb-sessions を参照してください。
商用利用が推奨されています。商用目的で作成する予定 PHP アプリケーション ソフトウェアは販売されており、ADODB を使用することもできます。ADODB は GPL に基づいて公開されています。つまり、商用アプリケーション ソフトウェアで合法的に引用でき、プログラム コードの所有権を保持できます。 ADODB の商用利用は強く推奨されており、このため社内で ADODB を使用しています。
上記では、adodb.recordset の内容を含め、php adodb の概要を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。