[PHP] ADODB 入門

WBOY
リリース: 2016-06-23 14:34:51
オリジナル
908 人が閲覧しました

この記事へのリンク:
http://www.openphp.cn/index.php/article/3/154/index.html

1. はじめに

ADODB は Active Data Objects Database の略称で、 PHPストレージ データベースの関数コンポーネントを取得します。現在、SFS3 システム (Campus Free Software Exchange Network Academic Affairs System) プロジェクトのホストである Chen Yingguang 先生は、プロジェクトへの参加に関心のあるより多くのパートナーがスムーズに開発ランクに参加できるようにするために、このコンポーネントを使用することを決定しました。 , ADODBを追加する必要があると思います 中国語の入門書は、パートナーの参考のために書かれています。

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' , 'Password', 'Database');
// 使用例:
$conn->Connect('localhost', 'piza', 'ooo123', 'test');永続的な接続。上記の式は PConnect で置き換えることができます。

// $conn->PConnect('localhost', 'piza', 'ooo123', 'test'); // SQL コマンドを設定します

$sql = "insert into tvalues ('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

get adodb242.tgz

2. 解凍します:

adodb242.tgz を /var/www/html に置いたとします

$ cp adodb242.tgz /var/www/html

$タールxvzf adodb 242. 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 がインストールされました。アドブ。

3. ADODB を導入します

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

その方法は次のとおりです:

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 接続オブジェクトの Connect または PConnect 関数を使用して、特定のデータベースに接続します。このとき、DSN (データ ソース名) 関連のデータを指定する必要があります。DSN には、ホスト名、データベース ユーザー、データベース パスワードが含まれます。データベース名。データベースの種類によっては、DSN はこれらの項目のいくつかを省略できる場合があります。 MySQL の場合、上記の 4 つがすべて提供されます。

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

ユースケース:

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

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

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

// 形式: $conn->PConnect('Host', 'User', 'Password', 'Database') ;

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

接続が成功したかどうかを確認したい場合は、変数を使用して戻り値を受け取ることができます。

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

$cok = $conn-> , $ 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 == false の場合に返される結果です。は実行が失敗したことを意味するため、注意深く確認する必要があります。

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

次のセクションから SQL の基本的なコマンドを紹介します。 、挿入、選択、更新、削除などの使用法。

8. レコードの挿入 (Insert)

Insert は次のように使用されます:

// $name は文字列、$year は数値
$name='abcde';
$year=18; Record では、コマンドの大文字と小文字は関係ありませんが、データ テーブル t と変数の大文字と小文字は異なります。

$sql = "INSERT INTO t VALUES ('$name', $year)"; = "t 値に挿入 ('$name', $year)"; も機能します。


// 実行

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

// 実行結果を確認し、正常であれば他のアクションを続行します。 $conn->ErrorMsg();


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


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

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

例は次のとおりです:

// ADODB を導入します

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

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

$conn = &ADONewConnection('mysql' );


// デバッグ

$conn->debug=true;


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

$mch="localhost"

$pwd="jack168";
$database="test";

// データベーステストに接続します
$conn->PConnect($mch, $user, $pwd, $database);

// 空のレコードを生成します
$sql = " select * from t where year=-1";

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

// 更新するデータを保持するために空の配列を使用します
$r = array() ;

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

// GetInsertSQL 関数を使用して、$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. レコードの取得(選択)

選択は次のように使用されます:


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

// 接続オブジェクトを作成します
$conn = &ADONewConnection('mysql');

// デバッグなし

$conn->debug=false;

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

$mch="localhost"
$pwd="ooo123";

$database="test";


// データベースに接続 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 {

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

while (!$rs->EOF) {
// すべてのフィールドを表示すると、$FieldCount() はフィールドの総数
for ($i=0, $max=$rs->FieldCount(); $ I & lt; $ max; $ i ++) {
Print $ RS- & GT Fields; ]. // 列を変更します
echo "
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->debug= false ;


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

$mch="localhost";

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

// SQL を実行する前に、名前インデックスの使用を指定します
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; ADORecordSet レコード セット オブジェクトを返します $rs
// 実際には $rs は現在のレコードの内容を保持するカーソル インジケーターです
// レコードはフィールド配列に格納されます
$rs = &$conn-> 'select * from t');

// $rs が false の場合、エラー メッセージを表示します
if (!$rs) {

print $conn->ErrorMsg(); else {


//レコードセットの終わり (EOF) に達していません。

while (!$rs->EOF) {

// すべてのフィールドを表示します
print $rs->fields['name'] 。 RS- & GT; フィールド ['年']

// 次のレコードに移動





}

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

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

?> 10. レコードの取得 (FetchRow を使用)

これは FetchRow のデモです。使用法:

$sql = "select * from t";

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

if ($rs) {

while( $ar = $rs->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="localhost"; pwd="ooo123";

$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';

// GetUpdateSQL 関数を使用して完全な SQL コマンドを作成します。 $updateSQL に配置

$updateSQL = $conn->GetUpdateSQL($rs, $r);

// 更新を実行

$conn->Execute($updateSQL);

$conn ->Close(); ;
?>

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

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

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

print "
n";

}

}


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

ユースケース:


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

// フィールド名とフィールドタイプを出力するコード
print $f->name 。 $rs->MetaType($f->type);
14. シンプルなページング (Pager)
ADODB は、レコードを表示するためのシンプルなページング メソッドを提供します。 使用する前に、adodb-pager.inc.php を導入する必要があります。

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

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

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

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

$db = ADONewConnection('mysql');

$user="piza";

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

$sql = "select * from t";


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

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


//ページごとに 5 つのレコードを表示します

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

結果は次のとおりです。


ページング関数

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

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


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

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

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


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

$db = ADONewConnection('mysql');

$mch="localhost"; ;

$pwd ="ooo123";


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

$sql = "名前を選択します', year as 'age' from t";

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

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

// ページごとに 5 つのレコードを表示

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


結果は次のとおりです:

15. CSV ファイルの出力

ADODB には、CSV ファイルを出力するためのメソッドが用意されています。 .inc.php をインポートする必要があります。

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

//出力CSVファイル関数の紹介

$db = ADONewConnection ('mysql');

$mch="piza";
$database="test"; mch , $user, $pwd, $database);

$sql = "t から 'name' として名前、'age' として年を選択します";
S // CSV 形式を表示
Print RS2CSV ($ RS)

rrr,65
kkk,29

sss,89

abc,18

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

uyt 58

ジョン 28

If print rs2tab($rs, true );

結果は次のとおりです:

名前 年齢
abcde 45
yyy 20
ppp 34
mmm 13
hh 41
rrr 65
kkk 29
miso 15 4
sss 89
abc 18
abcde 0
uyt 58
john 28


結果は次のとおりです

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
miso,154
sss,89
abc,18
abcde,0
uyt,58 hn、28
16. 特定の数のレコードを取得する (SelectLimit を使用)
ADODB が提供する ADOConnect 関数 SelectLimit を使用すると、特定の数のレコードを取得できます。 使用方法は次のとおりです。

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

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

// 3 つのペンを取り出し、最初のペンの後にこれら 3 つのレコードを表示します。 ;FetchRow() ) {

print $ar['name'] ." " . と言います。最初のレコードの後に​​、2 番目、3 番目、4 番目のレコードを 3 つ取り出します。

結果は次のとおりです:


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

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

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

注意 ! SelectLimit の書き方は MySQL の構文とは全く逆です!
17. まとめ
このハンドアウトは主に SFS3 (sfs) への参加に興味のあるパートナー向けに書かれています。 .wpes.tcc.edu.tw) プロジェクト。入門書としては、ADODB を理解し、それを SFS3 やその他の有意義な場所に適用するには、上記の紹介だけで十分ですよね。 これなら満足です!
参考資料

ADODB Web サイト

ADODB マニュアル


PHP オブジェクト指向入門

この記事へのリンク:

http://www.openphp.cn/index.php /article/3 /154/index.html


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