ホームページ >バックエンド開発 >PHPチュートリアル >adodb PHPのADODBクラスの詳しい説明

adodb PHPのADODBクラスの詳しい説明

WBOY
WBOYオリジナル
2016-07-29 08:37:341109ブラウズ

PHP は Web システムを構築するための強力なツールですが、データベースにアクセスする PHP の機能は標準化されておらず、各データベースは異なる互換性のないアプリケーション プログラミング インターフェイス (API) を使用しています。この欠点を埋めるためにADODBが登場しました。データベースにアクセスするためのインターフェースが標準化されると、さまざまなデータベース間の違いが隠蔽され、他の異なるデータベースへの切り替えが非常に簡単になります。
現在、ADODB は、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 を再度使用すると、親しみを感じると思います。
また、ASP を使用したことがある人には ADODB が馴染みがあるはずであり、そのような友人は ADODB を簡単に受け入れることができるはずです。
ADODB の簡単な使用法を見てみましょう:
//adodb が提供する関数を呼び出すために adodb の inc ファイルを導入します
include('adodb/adodb.inc.php');
//接続するデータベースの種類を選択して接続オブジェクトを作成します
// オブジェクトが作成されると、そのメンバー関数を使用してデータベースを処理できます。
//以下の$connがこのオブジェクト(object)です
$conn = &ADONewConnection('mysql');
//デバッグメッセージを表示するかどうか、falseは必須ではありません、trueは必須です。
// $conn->debug = false;
$conn->debug = true;
// データベースに接続します
// 使用法: $conn->Connect('Host', 'User', 'パスワード ', 'データベース');
//使用例:
$conn->Connect('localhost', 'piza', 'ooo123', 'test'); 永続的な接続を使用する場合は、上記の式は代わりに PConnect を使用できます:
// $conn->PConnect('localhost', 'piza', 'ooo123', 'test');
// Set SQL コマンド
$sql = "insert into t value ('abcde ', 18)";
//SQL コマンドを実行
$rs = $conn->Execute($sql);
//実行結果を確認し、$rs == false の場合は、 $conn オブジェクトのメンバー関数 ErrorMsg()
if (!$rs) print $conn->ErrorMsg(); else print "OK!"; 結果は次のようになります。 ------------------------ ---------------------------- ------
(mysql): t 値 ("abcde",18) に挿入
-- ----------------------- ----------------------
OK!
チェックを入れると、誤ってオフになった場合、つまり $conn->debug=false になります。結果は次のようになります:
OK!
以下は、ADODB を使用する主要な方法を段階的に紹介します。
2. インストール
ADODB のホームページは次のとおりです: http://php.weblogs.com/ADOdb 現在 (2002/10/24) の最新バージョンは、ADODB または台南県教育からの FTP からダウンロードできます。ネットワークセンター。
ADODB のインストール方法は非常に簡単です。以下に示すように、ダウンロードして解凍し、適切な場所に配置するだけで完了です。
1. ダウンロード:
$ ncftp ftp.tnc.edu.tw
cd sysop /ADODB
adodb242 .tgz を取得します
2. 解凍します:
adodb242.tgz を /var/www/html に置くとします
$ cp adodb242.tgz /var/www/html
$ tar xvzf adodb242.tgz
以下に示すように:
adodb/adodb-cryptsession.php
adodb/adodb-csvlib.inc.php
adodb/adodb-errorhandler.inc.php
adodb/adodb-errorpear.inc.php
adodb/adodb-lib.inc.php
adodb /adodb-pager.inc.php
....以下省略....
これで、/var/www/html/adodb に ADODB がインストールされました。
3. ADODB を導入する
ADODB をインストールしたら、使用する前に ADODB 関連のインクルード ファイルをプログラムに導入する必要があります。 adodb ディレクトリが正しいパス ファイル名を指している限り、どこに置かれても問題ありません。一般に、プログラム コードには adodb.inc.php を含める必要があるだけです。
方法は次のとおりです:
PHP プログラム内:
include('path/adodb/adodb.inc.php'); または
include_once('path/adodb/adodb.inc.php');
例:
プログラムと adodb が同じディレクトリにある場合:
..
adodb/
something.php*
その後:
include('adodb/adodb.inc.php'); 以上です。
場所が somedir の場合:
..
adodb
somedir/something.php
include('../adodb/adodb.inc.php');
adodb を除く。 inc.php インクルード ファイルのほか、ADODB では多くの adodb-*.inc.php インクルード ファイルも提供しています。これらは主に、特定のデータベースの特別な使用法を推進するように設計されています。
adodb-session.php を導入すると、セッションをデータベースに保存してアプリケーションを保守できます。
adodb-pager.inc.phpを導入するとページネーションの表示が便利になります。
adodb-errorhandler.inc.php を導入すると、エラー処理メッセージをカスタマイズできます。
adodb-pear.inc.php をインクルードすると、PHP4 の PEAR DB 構文を使用して ADODB を使用できます。この時点でも、DSN を使用してデータベース文字列設定に接続できます。たとえば、 $dsn="mysql://piza:ooo123@localhost/test";
tohtml.inc.php を導入すると、取得したレコードをプログラム コード内で HTML テーブルに変換できます。
toexport.inc.phpを導入すると、CSVファイルやタブ区切りのデータファイルを簡単にエクスポートできます。
rsfilter.inc.php を導入すると、レコードを使用する前に事前にフィルターをかけることができます。
pivottable.inc.phpを導入するとピボットテーブル機能(通称クロス集計)が利用できるようになります。
注意! 他の機能については、使用する機能に応じて、付属のファイルをインポートする必要があります。
4. データベースの種類を選択し、接続オブジェクトを作成します。
ADODB はオブジェクト指向のアプローチを使用しているため、ファイルをインポートした後、バックエンド データベースの種類に応じて接続オブジェクトを作成できます。メソッドは次のとおりです:
MySQL データベースを例に挙げます:
$conn = &ADONewConnection('mysql');
注: NewADOConnection と ADONewConnection は同じであり、両方を使用できます。
上記の例の「mysql」はデータベース ドライバーのタイプを指し、ADODB はそれに応じて対応するデータベース ドライバーを呼び出します。
その他の一般的に使用されるドライバーは次のとおりです: access、ado、ado_access、ado_mssql、db2、vfp、ibase、borland_ibase、informix、imformix72、mssql、oci8、odbc、postgres、postgres64、postgres7、sqlanywhere、sybase....など。
作成されたオブジェクト $conn を ADOConnection オブジェクトと呼びます。これはデータベースとの接続トランザクションを表し、このオブジェクトを通じて処理されます。 ADOConnection オブジェクトは、オブジェクト指向の用語では、これらのメソッドをメンバー関数と呼びます。これは、外部からこのオブジェクトにアクセスするためのインターフェイスです。
オンライン オブジェクトが作成されると、多くのオブジェクト関数を自由に使用できるようになります。次のセクションの概要を参照してください。
5. デバッグモード
プログラム開発の過程では、考えられる問題の検出を容易にするために、通常、デバッグモードをオンにし、プログラムの機能が実際に安定した後にオフにします。 ADODB には、データベースへのアクセス時にデータベースがどのように動作するかを表示するデバッグ モードが用意されています。
デバッグ モードをオンにする、使用法:
$conn->debug=true
デバッグ モードをオフにする、使用法:
$conn->debug=false
6. 次に、$conn 接続オブジェクトを使用します。特定のデータベースに接続するための PConnect 関数。このとき、DSN (データ ソース名) 関連データには、ホスト名、データベース ユーザー、データベース パスワード、データベース名が含まれる場合があります。データベースの種類が異なると、DSN はこれらの項目の一部を省略できる場合があります。 MySQL の場合、上記の 4 つをすべて提供する必要があります。
この関数は、接続が成功したかどうかを示す true または false を返します。
ユースケース:
// 形式: $conn->Connect('Host', 'User', 'Password', 'Database');
$conn->Connect('localhost', 'piza', ' ooo123', 'test');
または、永続的な接続を使用します:
//形式: $conn->PConnect('Host', 'User', 'Password', 'Database'); PConnect('localhost', 'piza', 'ooo123', 'test');
接続が成功したかどうかを確認したい場合は、変数を使用して戻り値を受け取ることができます:
$mch="localhost";
$ user="piza";
$pwd="ooo123";
$cok = $conn->Connect($mch, $pwd, $database); 、永続的な接続を選択します:
$cok = $conn->PConnect($mch, $user, $pwd, $database);
if (!$cok) { echo "データベース $database に接続できません"; }
7 .SQLコマンド構文を設定し、SQLコマンドを実行します。
次に、実行したいSQLコマンド構文を設計し、実行します。
$sql = "SQL のコマンド構文をここに置きます";
$rs = $conn->Execute($sql);
このうち、$rs == false の場合、それは返される結果です。実行に失敗しました。注意深く確認する必要があります。
コマンド構文を $sql 変数に入れる必要はありません。Execute() 括弧内に直接入れることもできます。コマンドが短い場合は問題ありません。コマンドが長い場合は、変数 $sql を使用してコマンド文字列を設定することをお勧めします。次のセクションから、SQL の基本的なコマンドを紹介します。挿入、選択、更新、削除の使用法など。
8. レコードの挿入 (Insert)
Insert は次のように使用されます:
// $name は文字列、$year は数値
$name='abcde';
$year=18;コマンド t の大文字と小文字は関係ありませんが、データ テーブル t と変数の大文字と小文字は異なります。
$sql = "INSERT INTO t VALUES ('$name', $year)"
// $sql = "insert into tvalues(' $name', $year)"; も使用できます。
//実行
$rs = $conn->Execute($sql);
//実行結果を確認し、正常であれば他のアクションを続行します....
if (!$rs) print $conn ->ErrorMsg();
....以下省略....
ErrorMsg()はエラーメッセージを取り出して表示します。
さらに、ADODB は、挿入構文の生成に役立つ RecordSet 関数 GetInsertSQL() を提供します。
例は次のとおりです:
//ADODB を導入します
include('adodb/adodb.inc.php');
//接続オブジェクトを作成します
$conn = &ADONewConnection('mysql'); /Debug
$conn->debug=true;
// DSN の 4 つの基本データ設定
$mch="root";
$pwd="jack168"; ";
// データベースに接続 test
$conn->PConnect($mch, $user, $pwd, $database);
// 空のレコードを生成
$sql = "select * from t where year= -1";
$rs = $conn->Execute($sql);
// 更新するデータを保持するために空の配列を使用します
$r = array();
$r['name']= ' john';
$r['year']=28;
// GetInsertSQL 関数を使用して完全な SQL コマンドを作成します。
$insertSQL = $conn->GetInsertSQL($rs) , $r);
//挿入
$conn->Execute($insertSQL);
$conn->Close();
デバッグ メッセージは次のとおりです。 -------------------------------------------------- - --
(mysql): select * from t where year=-1
-------------------------------- - ------------------------
(mysql): INSERT INTO t (名前, 年) VALUES ('john', 28)
- -------------------------------------------------- - -------
9. レコードの取得 (選択)
//ADODB の導入
include('adodb/adodb.inc.php');接続を確立します オブジェクト
$conn = &ADONewConnection('mysql');
// デバッグなし
$conn->debug=false;
// DSN の 4 つの基本データ設定
$mch="localhost"; "piza";
$pwd="ooo123";
$database="test"
// データベーステストに接続します
$conn->PConnect($mch, $user, $pwd, $database); // Select を実行してテーブル t からデータを取得します
// ADORecordSet レコード セット オブジェクト $rs (RecordSet) が返されます
// 実際、$rs は現在のレコード (行またはレコード) を所有するカーソル インジケーターです,
//レコードのすべてのフィールド データの内容は、フィールド配列に格納されます
// 番号でインデックス付けされ、最初のものは 0 から始まります
$rs = &$conn->Execute('select * from t ');
// $rs が false の場合、エラー メッセージを表示します
if (!$rs) {
print $conn->ErrorMsg();
// レコード セットがまだ作成されていない場合$ rs の終了位置 (EOF: End Of File) に達したとき (つまり、取り出されていないレコードがまだあるとき)
while (!$rs->EOF) {
// すべてのフィールドを表示, $FieldCount() はフィールドの総数
for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) {
print $rs->fields を返します[$i] . " ";
// 次のレコードに移動
$rs->MoveNext();
echo "
n"; ->Close(); // 使用可能
$conn->Close(); // 使用可能
$rs->fields[] 配列は PHP のデータベース拡張機能によって生成されます一部の拡張関数はフィールドの使用をサポートしていません。名前はインデックスとして使用されます。
名前をインデックス (一般にハッシュ配列または連想配列として知られています) として使用する場合は、グローバル変数 $ADODB_FETCH_MODE を使用してそれを指定する必要があります。
以下の設定: 数値インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_NUM;
以下の設定: 名前インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_ASSOC;
以下は名前インデックスの使用例です:
//はじめに ADODB
include( 'ado db /adodb.inc.php');
// 接続オブジェクトを作成します
$conn = &ADONewConnection('mysql');
// デバッグなし
$conn->debug=false;データ設定
$mch="localhost";
$pwd="jack168";
$database="test";
$conn->PConnect( $ mch, $user, $pwd, $database);
// SQL を実行する前に、使用する名前インデックスを指定します
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
// Select を実行すると、ADORecordSet レコード セット オブジェクトが返されます $rs
/ / 実際 $rs は現在のレコードの内容を保持するカーソル インジケーターです
// レコードはフィールド配列に保存されます
$rs = &$conn->Execute('select * from t'); / $rs が false の場合、エラーメッセージを表示します
if (!$rs) {
print $conn->ErrorMsg();
} else {
// レコードセットの終わり (EOF) が終了していない場合に達しました、
while (!$rs->EOF) {
// すべてのフィールドを表示します
print $rs->fields['name'] . $rs->fields['year']; // 次のレコードに移動
$rs->MoveNext();
// 列を変更
}
} // 不要
$conn->Close(); // 必要ですか?>
10. レコードの取得 (FetchRow を使用)
$sql = "select * from t" ;
$rs = $conn ->Execute($sql);
if ($rs) {
while( $ar = $rs->FetchRow() ) {
print $ar['name'] 。 " . $ar['year '];
print "
n";
}
}
FetchRow() はフェッチされたレコードを返し、配列を使用してそれを受け取ることができます。
注意! FetchRow() を使用する場合、MoveNext() を使用する必要はありません。FetchRow は次のレコードへの移動アクションを内部で自動的に完了します。
11. レコードを更新する (Update)
$sql="UPDATE t SET name='john', year=28 WHERE year=18";
$conn->Execute($sql) を使用できます。 ;
次のメソッドも使用できます:
//ADODB を導入します
include('adodb/adodb.inc.php');
// 接続オブジェクトを作成します
$conn = &ADONewConnection('mysql' ) ;
// デバッグ
$conn->debug=true;
$mch="localhost";
$ Database="test";
//データベース test に接続します
$conn->PConnect($mch, $user, $pwd, $database);
//更新するレコードを選択します
$sql = "select * from t where year=18";
$rs = $conn->Execute($sql);
// 更新するデータを保持するために空の配列を使用します
$r = array();
$ r[ 'name']='john';
$r['year']=28;
// GetUpdateSQL 関数を使用して、完全な SQL コマンドを $updateSQL に配置します
$updateSQL = $ conn-> GetUpdateSQL($rs, $r);
//更新を実行
$conn->Execute($updateSQL);
デバッグ メッセージは次のとおりです。 ------------------------------------------------ -- ----------
(mysql): select * from t where year=18
------------------------ -- -----------------------------------
(mysql): UPDATE t SET name = 'john' 、年= 28 WHERE 年 = 18
----------------------------------------------------- -- ------------------
12. レコードの削除 (削除)
レコードの削除は非常に簡単で、従来の方法を使用するだけです: $sql = "DELETE FROM t WHERE year= 18 ";
$rs = $conn->Execute($sql);
13. フィールド オブジェクトの使用
ここでは、フィールド オブジェクト FetchField を使用してフィールド名とフィールド タイプを取得する方法を示します。
$sql = " select * from t";
$rs = &$conn->Execute($sql);
if ($rs) {
while (!$rs->EOF) {
// 2 番目のフィールドを取り出す
$f = $rs->FetchField(1);
//フィールド名とフィールドタイプを出力します
$f->name . $f->MoveNext; ();
print "
n";
}
}
さらに、ADODB は、元のフィールド型を一般的な型コードに変換できる RecordSet 関数 MetaType() を提供します。テキスト
B: blob
D: 日付
T: タイムスタンプ
L: ブール値またはビット
I: 整数
N: 自動インクリメント、数値、浮動小数点数、実数、整数を含む数値タイプ
R :シリアル、自動インクリメント
使用例:
$f = $rs->FetchField(1);
//フィールド名とフィールド型コードを出力します
print $f->name ":" 。 ;MetaType($f->type);
14. シンプルなページング (Pager)
ADODB は、レコードを表示するためのシンプルなページング メソッドを提供します。使用する前に、adodb-pager.inc.php を導入する必要があります。
include('adodb/adodb.inc.php');
//ページング関数の導入
include('adodb/adodb-pager.inc.php')
//セッションを開始します
session_start(); ;
$db = ADONewConnection('mysql');
$pwd="ooo123"; Connect($mch, $user, $pwd, $database);
$sql = "select * from t";
$pager = new ADODB_Pager($db, $sql); 1 ページに 5 つのレコードを表示
$pager->Render($rows_per_page=5);
?> 結果は次のとおりです:
図 1. 単純なページング関数
各ページに表示されるレコードの数は次のように制御されます。 Render() 、指定された行番号が Render() に渡されない場合、デフォルト値は 1 ページあたり 10 行です。
さらに、以下に示すように、フィールド名も変更できます。
include('adodb/adodb.inc.php');
//ページング関数の導入
include('adodb/adodb-pager) .inc.php ');
// セッションを開始します
$db = ADONewConnection('mysql');
$user="piza"; ";
$database="test";
$db->Connect($mch, $user, $pwd, $database);
$sql = "「名前」として名前を選択し、「年齢」として年を選択します。 ";
/ / ページャー オブジェクトを生成します
$pager = new ADODB_Pager($db, $sql);
// ページごとに 5 つのレコードを表示します
$pager->Render($rows_per_page=5);
?>
結果は次のとおりです。
図 2. フィールド名の変更
15. CSV ファイルの出力
ADODB には CSV ファイルを出力するためのメソッドが用意されており、使用する前に Toexport.inc.php をインポートする必要があります。
include('adodb/adodb.inc.php');
//出力CSVファイル関数の導入
include('adodb/toexport.inc.php')
$db = ADONewConnection('mysql') );
$mch="ローカルホスト";
$pwd="ooo123";
$db-> , $database);
$sql = "名前を 'name' として、年を '年齢' として選択します。
$rs = $db->Execute($sql);
//CSV 形式を表示
print rs2csv ($rs);
?>
結果は次のとおりです:
名前、年齢
abcde,45
yyy,20
ppp,34
mmm,13
hh,41
rrr,65
kkk,29
miso ,154
sss,89
abc,18
abcde,0
uyt,58
john,28
次のように rs2tab を使用してフィールドを区切ることもできます。
print rs2tab($rs, false); false はフィールド名を表示しないことを意味します
結果は次のとおりです:
abcde 45
yyy 20
ppp 34
mmm 13
hh 41
rrr 65
kkk 29
miso 154
sss 89
ab c 18
abcde 0
uyt 58
john 28
If print rs2tab($ rs, true);
結果は次のとおりです:
名前 年齢
abcde 45
yyy 20
ppp 34
mmm 13
hh 41
rrr 65
kkk 29
味噌 154
sss 89
abc 18
abcde 0
uyt 58
john 28
rs2tabout の使用方法は次のとおりです。
print rs2tabout($rs);
実行結果は次のとおりです。
図 1. コンソールに結果を表示します
CSV ファイルとして保存することもできます:
// ファイルパス
$path = "/tmp/test.csv";
// ファイルを開きます。 writing
$fhd = fopen($path, "w");
// ファイルが正常に開かれた場合
if ($ fhd) {
// 次に CSV に書き込みます
rs2csvfile($rs, $fhd); / rs2tabfile($rs, $fhd); を使用することもできます
// ファイルを閉じます
fclose($fhd);
結果は次のようになります:
[ols3@p web]$ cat /tmp/test. csv
名前、年齢
abcde,45
yyy,20
ppp,34
mmm,13
hh,41
rrr,65
kkk,29
miso,154
sss,89
abc,18 0
uyt,58
john,28
16. 特定の数のレコードを取得します (SelectLimit を使用)
ADODB には、取得できる ADOConnect 関数 SelectLimit が用意されています。特定の数のレコードの場合、使用法は次のとおりです。 Connect($mch, $user, $pwd, $database);
rs = $conn->SelectLimit("Select * from t", 3, 1 );
// 最初のレコードの後に​​ 3 つのレコードを取り出します
// これら 3 つのレコードを表示します
if ($rs) {
while( $ar = $rs->FetchRow()) {
print $ar ['name'] ." " $ar['year'];
print "
n";
}
}
上記の式は、1 番目のレコードの後に​​、2 番目、3 番目、4 番目のレコードを 3 つ取り出します。
結果は以下の通りです:
------------------------------------------ ----
(mysql): select * from t LIMIT 1,3
-------------------------------- ---------
SelectLimit 書き方はMySQLの構文とは全く逆です!

以上、adodb PHP の ADODB クラスの詳細な説明を adodb の内容も含めて紹介しましたので、PHP チュートリアルに興味のある友人の参考になれば幸いです。

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