ホームページ > php教程 > php手册 > PHPのADODBクラスの詳しい説明

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

WBOY
リリース: 2016-06-13 12:30:24
オリジナル
1644 人が閲覧しました

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 の inc ファイルを導入することによってのみ、ADODB が提供する関数を呼び出すことができます。 adodb

include('adodb/adodb.inc.php');

// オンライン オブジェクトを作成するために接続するデータベースのタイプを選択します

//オブジェクトが作成されると、そのメンバー関数がデータベースを処理して使用できるようになります。

// 次の $conn はこのオブジェクト (オブジェクト)

$conn = &ADONewConnection('mysql');

// デバッグ メッセージを表示するかどうか、falseいや、本当だよ。

// $conn->debug = false;



$conn->debug = true;

// データベースに接続します。 🎜 >
// 使用法: $conn->Connect('Host', 'User', 'Password', 'Database');

// 使用例:

$ conn->Connect('localhost', 'piza', 'ooo123', 'test');

// 永続的な接続を使用する場合は、上記の式を PConnect に置き換えることができます。

// $conn->PConnect('localhost', 'piza', 'ooo123', 'test');

// SQL コマンドを設定します

$ sql = "t 値に挿入 ('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 からダウンロードできます。 ADODB からダウンロードするか、台南県教育ネットワーク センターの FTP ダウンロードにアクセスしてください。

ADODB のインストール方法は非常に簡単です。以下に示すように、ダウンロードして解凍し、適切な場所に配置するだけで完了です。

1. ダウンロード:

$ ncftp ftp.tnc.edu.tw

cd sysop/ADODB

get adodb242.tgz

2. 解凍:

put 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

....以下



これで、ADODB が /var/www/html/adodb にインストールされました。

3. ADODB の導入
ADODB をインストールしたら、使用前に ADODB 関連のインクルード ファイルをプログラムに導入する必要があります。 adodb ディレクトリが正しいパス ファイル名を指している限り、どこに置かれても問題ありません。一般に、プログラム コードには adodb.inc.php を含める必要があるだけです。

メソッドは次のとおりです。

PHP プログラム内:

include('path/adodb/adodb.inc.php');

または

include_once('path/adodb/adodb.inc.php');



例:

プログラムが同じディレクトリにある場合as 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 接続オブジェクトの Connect または PConnect 関数を使用して、特定のデータベースに接続します。 DSN (データ ソース名) 関連データ。DSN には、ホスト名、データベース ユーザー、データベース パスワード、データベース名が含まれる場合があります。データベースの種類が異なると、DSN はこれらの項目の一部を省略できる場合があります。 MySQL の場合、上記の 4 つがすべて提供されます。

この関数は、接続が成功したかどうかを示す true または false を返します。

使用例:

// 形式: $conn->Connect('Host', 'User', 'Password', 'Database'); conn->Connect('localhost', 'piza', 'ooo123', 'test');

または、永続的な接続を使用します:

// 形式: $conn-> ; PConnect('ホスト', 'ユーザー', 'パスワード', 'データベース');

$conn->PConnect('localhost', 'piza', 'ooo123', 'test') ; 🎜>
接続が成功したかどうかを確認したい場合は、変数を使用して戻り値を受け取ることができます:

$mch="localhost";

$user=ピザ" ;

$pwd="ooo123";

$database="test";

$cok = $conn->Connect($mch, $user) , $ pwd, $database);

または、永続的な接続を使用します:

$cok = $conn->PConnect($mch, $user, $pwd, $database); 🎜 >
if (!$cok) { echo "データベース $database に接続できません"; exit; }

7. SQL コマンド構文を設定し、SQL コマンドを実行します。
実行する SQL コマンド構文を設計して実行できます。

$sql = "ここでの SQL コマンド構文";

$rs = $conn->Execute($sql);



, $rs が返された結果です。$rs == false の場合は、実行が失敗したことを意味します。慎重に確認する必要があります。

コマンド構文を $sql 変数に入れる必要はありません。Execute() 括弧内に直接入れることもできます。コマンドが短い場合は問題ありません。コマンドが長い場合は、変数 $sql を使用してコマンド文字列を設定することをお勧めします。

次のセクションから説明します。 SQL の基本的なコマンド ( Insert 、 Select、 Update、 Delete など) の使用法。

8. レコードの挿入 (Insert)
Insert の使用法は次のとおりです:

// $name は文字列、$year は数値

$ name='abcde ';

$year=18;

// レコードを挿入します。コマンドの大文字と小文字は関係ありませんが、データ テーブル t と変数の大文字と小文字は異なります。 !

$sql = "INSERT INTO t VALUES ('$name', $year)";

// $sql = "INSERT INTO t Values ('$name', $year)"; こちらも利用可能です。

// 実行

$rs = $conn->Execute($sql);

// 実行結果を確認し、正常であれば続行します。アクション....

if (!$rs) print $conn->ErrorMsg();

....以下省略....



ErrorMsg()はエラーメッセージを取り出して表示する関数です。

さらに、ADODB は、挿入構文の生成に役立つ RecordSet 関数 GetInsertSQL() を提供します。

例は次のとおりです。


//ADODB の紹介

include('adodb/adodb.inc.php') ;

// 接続オブジェクトを作成します

$conn = &ADONewConnection('mysql');

// デバッグ

$conn->debug= true;

// DSN の 4 つの基本データ設定

$user="root"; "jack168";

$database="test";

// データベースに接続テスト

$conn->PConnect($mch, $user, $ pwd , $database);

// 空のレコードを生成します

$sql = "select * from t where year=-1"; ->Execute($sql);



// 更新するデータを保持するために空の配列を使用します

$r = array()

$r['name']='john';

$r['year']=28;

// GetInsertSQL 関数を使用して完全な SQL コマンドを作成します。 SQL コマンドは $insertSQL に配置されます

$insertSQL = $conn->GetInsertSQL($rs, $r);

// 挿入を実行します

$conn- > ;Execute($insertSQL);

$conn->Close();



デバッグ メッセージは次のとおりです。

------------------------------------------ ---- ---------------

(mysql): select * from t where year=-1

------ --- ---------------------------------------------------

(mysql): INSERT INTO t ( name, year ) VALUES ( 'john', 28 )

--------- ------ --------------------------------------

9. レコードを取り出します (Select)
Select は次のように使用されます:


//ADODB の紹介

include('adodb/ adodb.inc.php');

// 接続オブジェクトを作成します

$conn = &ADONewConnection('mysql');

// デバッグなし

$conn->debug= false;

// DSN の 4 つの基本データ設定

$mch="localhost";

$ 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(); else {

//レコードセット$rsの終了位置(EOF:End Of File)に達していない場合(つまり、取り出していないレコードがまだある場合)

while (!$rs-> ;EOF) {

// すべてのフィールドを表示します。$FieldCount() は、フィールド

の合計数を返します ($i=0, $max=) $rs->FieldCount() ; $i

print $rs->
}

// 次のレコードに移動

$rs->MoveNext();



// 列を変更

echo "< ;br>n";

}

}

$rs->Close(); // 不要

$conn->; Close(); // 使用できません



$rs->fields[] 配列は PHP のデータベース拡張機能によって生成されます。一部の拡張関数はインデックスとして使用されません。

名前をインデックス (ハッシュ配列または連想配列とも呼ばれます) として使用する場合は、グローバル変数 $ADODB_FETCH_MODE を使用してそれを指定する必要があります。

次の設定: 数値インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_NUM;



次の設定: 名前インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_ASSOC;名前インデックスの使用例:


//ADODB の紹介

include('adodb/adodb.inc.php')

// 接続オブジェクトを作成します

$conn = &ADONewConnection('mysql');

// デバッグなし

$conn->
// DSN の 4 つの基本データ設定

$user="root";

$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->MoveNext();



// 変更columns

echo "
n";

}

$rs->Close ();

$conn->Close(); // 使用可能

?>10. レコードの取得 (FetchRow を使用)
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;

// DSN の 4 つの基本データ設定

$mch ="ローカルホスト";

$user="ピザ";

$database="テスト"; // データベースに接続します 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 コマンドを作成します。この SQL コマンドは $updateSQL

$updateSQL = $conn -> に配置されます。 GetUpdateSQL($rs, $r);

//更新を実行

$conn->Execute($updateSQL); ;

?>



デバッグ メッセージは次のとおりです:

------------- ---------------------------------------

(mysql): select * from t where year=18

-------------------------- ----- -------------------------

(mysql): UPDATE t SET name = 'john' 、 year = 28 WHERE year=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);

// フィールド名とフィールドの型を出力します

print $ f->name. :" . $f->type;

$rs->MoveNext();

print "
n";

}

}



さらに、ADODB は、元のフィールド型を一般的な型コードに変換できる RecordSet 関数 MetaType() を提供します。
C: 文字

X : テキスト

B : blob

D : 日付

T : タイムスタンプ

L :ブール値またはビット

I: 整数

N: 自動インクリメント、数値、浮動小数点数、実数、整数を含む数値タイプ

R: シリアル、 auto-increment



使用例:

$f = $rs->FetchField(1);

//フィールド名を出力し、フィールド タイプ コード

print $f->name . ":" . $rs->MetaType($f->type);

14. 🎜>ADODB は、ページングでレコードを表示するには、使用前に adodb-pager.inc.php を導入する必要があります。


include('adodb/adodb.inc.php');

// ページング関数の導入

include('adodb /adodb-pager.inc.php');

// セッションを開始します

$db = ADONewConnection('mysql');
$mch="ローカルホスト";

$user="ピザ";

$database="テスト"; 🎜>
$db->Connect($mch, $user, $pwd, $database);

$sql = "select * from t"; pager オブジェクト

$pager = new ADODB_Pager($db, $sql);

// 各ページには 5 つのレコードが表示されます

$pager->Render($ rows_per_page=) 5);

?>



結果は次のとおりです:



図 1. 単純なページング関数



各ページに表示されるレコード数は Render() によって制御されます。指定された行数が Render() に渡されない場合、デフォルト値は 1 ページあたり 10 レコードです。

さらに、以下に示すように、フィールド名も変更できます。


include('adodb/adodb.inc.php');

// ページング関数を導入します

include('adodb/adodb-pager.inc.php');

// セッションを開始します

session_start( );

$db = ADONewConnection('mysql');

$user="ピザ"; $pwd=" ooo123";

$database="test"

$db->Connect($mch, $user, $pwd, $database); 🎜>$sql = "select name as 'name', year as 'age' from t";

// ページャー オブジェクトを生成

$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="localhost"; " ピザ";

$pwd="ooo123";

$db->Connect($mch, $user, $ pwd , $database);

$sql = "「名前」として名前、「年齢」として年を選択します";

$rs = $db->Execute($sql) ) ;

// CSV 形式を表示します

print rs2csv($rs);



結果は次のようになります。

名前、年齢

abcde,45

yyy,20

ppp,34

mmm,13

haha,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

abc 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

miso 154

sss 89

abc 18

abcde 0 表示、次のように rs2tabout メソッドを使用します:

print rs2tabout($rs) ;



実行結果は次のとおりです:



図 1 . コンソールに結果を表示します



または CSV ファイルとして保存します:

// ファイルパス

$path = "/tmp/test.csv";

// ファイルを開きます書き込み用

$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

みそ,154

sss,89

abc,18

abcde,0

uyt,58

john,28

16. 特定の数のレコードを取り出します (SelectLimit を使用)。
ADODB は、特定の数のレコードを取得できる ADOConnect 関数 SelectLimit を提供します。使用方法は次のとおりです。

$conn->Connect($mch, $user , $pwd, $ Database);

rs = $conn->SelectLimit("Select * from t", 3, 1);

// ペン
// これら 3 つのレコードを表示します

if ($rs) {

while( $ar = $rs->FetchRow()) {

print $ar['name'] ." " . $ar['year'];

print "
n";

}

上記の式は、最初のレコードの後に​​、2番目、3番目、4番目のレコードを3つ取り出すことを意味します。

結果は次のとおりです:
-------------------------------------- ------

(mysql): select * from t LIMIT 1,3

----------- ------ ------------

注意! SelectLimit の記述方法は、MySQL 構文とはまったく逆です。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート