ホームページ >バックエンド開発 >PHPチュートリアル >php 入門 adodb_PHP チュートリアル

php 入門 adodb_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:46:531001ブラウズ

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 と呼ばれるデータベース パッケージ リンク ライブラリが登場しました。サポートされているすべてのデータベースと通信するための共通 A​​PI が提供されるため、諦める必要はありません。
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 コマンドを実行し、最後の段落は結果の各列をスキャンし、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 製品の SELECT TOP の使用法から採用されています。元のデータベースがこの使用法を提供していない場合でも、この関数はこの使用法をシミュレートして提供します。
キャッシュ サポート
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 を使用しています。


http://www.bkjia.com/PHPjc/320058.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/320058.html技術記事 PHP は Web システムを構築するための強力なツールですが、データベースにアクセスする PHP の機能は標準化されていません。各データベースは別の異なる互換性のないアプリケーションを使用します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。