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 が提供する関数を呼び出すことができます
include('adodb/adodb.inc.php') ;
//接続オブジェクトを作成するために接続するデータベースのタイプを選択します。
//オブジェクトが作成されたら、そのメンバー関数を使用してデータベースを処理できます。
//以下の$connがこのオブジェクト(object)です
$conn = &ADONewConnection('mysql');
//デバッグメッセージを表示するかどうか、falseは必須ではありません、trueは必須です。
// $conn->debug = false;
$conn->debug = true;
// データベースに接続します
// 使用法: $conn->Connect('Host', ' ユーザー', 'パスワード', 'データベース');
// 使用例:
$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
cdsysop/adodb get adodb242.tgz x vzf adodb242.TGZ 下 以下に示すように:
Adodb/Adodb- CryptSession.php
Adodb/Adodb-CSVLib.inc.php
Adodb/Adodb-ErrorHandler.Inc.Php
Adodb-Errorpear.Inc.php Bleak
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.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 はこれらの項目の一部を省略できる場合があります。 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-> $user , $pwd, $database);
または、永続的な接続を使用します:
$cok = $conn->PConnect($mch, $user, $pwd, $database); ) { echo "データベース $database に接続できません"; exit; }
7. SQL コマンド構文を設定し、SQL コマンドを実行します
次に、実行する SQL コマンド構文を設計して実行します。
$sql = "SQL コマンド構文をここに置きます";
$rs = $conn->Execute($sql);
このうち、 $rs == false の場合に返される結果は、これは実行が失敗したことを意味するため、注意深く確認する必要があります。
コマンド構文を $sql 変数に入れる必要はなく、Execute() 括弧内に直接入れることもできます。コマンドが短い場合は問題ありません。コマンドが長い場合は、変数 $sql を使用してコマンド文字列を設定することをお勧めします
次のセクションから SQL の基本的なコマンドを紹介します。 、挿入、選択、更新、削除など。
8. レコードの挿入 (Insert)
// $name は文字列、$year は数値
$name='abcde'
/ / Insert レコードの場合、コマンドの大文字と小文字は関係ありませんが、データ テーブル t と変数の大文字と小文字は異なります。
$sql = "INSERT INTO t VALUES ('$name', $year)";
// $sql = "t 値に挿入 ('$name', $year)"; も利用できます。
// 実行
$rs = $conn->Execute($sql);
// 実行結果を確認し、正常であれば他のアクションを続行します。 ) print $conn->ErrorMsg();
....以下省略....
ErrorMsg()はエラーメッセージを取り出して表示します。
さらに、ADODB は、Insert の構文の生成に役立つ 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);
// 空の配列を使用してrequest 更新されたデータ
$r = array();
$r['name']='john';
// 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 (名前, 年) VALUES ('john', 28)
---------- ---------------- ---------------------------------- -----------
9. レコードの取り出し(選択)
//ADODBの導入
include('adodb/adodb.inc .php');
// 接続オブジェクトを作成します
$conn = &ADONewConnection ('mysql');
// デバッグなし
$conn->debug=false;
// DSN の 4 つの基本データ設定
$mch="localhost";
$pwd="ooo123";
$database="test"; ->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() はフィールドの合計数を返します
for ($i= 0, $max=$rs->FieldCount(); $i
}
// 移動次のレコードへ
$rs->MoveNext();
// 列を変更
echo "
n"
}
}
$rs->Close() ; // オプション
$conn->Close(); // オプション
$rs->fields[] 配列は、PHP のデータベース拡張関数によって生成されます。フィールド名をインデックスとして使用します。
一般にハッシュ配列または連想配列として知られる名前をインデックスとして使用する場合は、グローバル変数 $ADODB_FETCH_MODE を使用してそれを指定する必要があります。
次の設定: 数値インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_NUM;
次の設定: 名前インデックスを使用 $ADODB_FETCH_MODE= ADODB_FETCH_ASSOC; 以下は、名前インデックスの使用例です。 ;?php
// ADODB を導入します
include('adodb/adodb.inc.php');
// 接続オブジェクトを作成します
$conn = &ADONewConnection('mysql')
// デバッグなし
$conn - >debug=false;
// DSN の 4 つの基本データ設定
$mch="localhost";
$database="; ";
// データベースに接続する test
$conn->PConnect($mch, $user, $pwd, $database);
// SQL を実行する前に、使用する名前インデックスを指定します
$ ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
//選択を実行すると、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 ();
// 列を変更
}
}
$rs->Close(); // 必要ありません
$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;
// DSN の 4 つの基本データ設定
$ user="piza";
$database="test";
// データベーステストに接続します
$conn->PConnect($mch, $user, $ pwd, $database);
//更新するレコードを選択
$sql = "select * from t where year=18";
$rs = $conn->Execute($sql); // 更新するデータを保持するために空の配列を使用します
$r = array();
$r['year']=28 ; // GetUpdateSQL 関数を使用して完全な SQL コマンドを作成します。この 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"; = $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->$rs ->MoveNext();
print "
n";
}
}
さらに、ADODB は元のフィールドの型を変換できる RecordSet 関数 MetaType() を提供します。一般的な型コード:
C: 文字
X: テキスト
B: blob
D: 日付
T: タイムスタンプ
L: ブール値またはビット
I: 整数
N : 数値型含まれるもの: 自動インクリメント、数値、浮動小数点数、実数、整数
R: シリアル、自動インクリメント
ユースケース:
$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');
$user="piza"; ="test";
$db->Connect($mch, $user, $pwd, $database);
$sql = "select * from t"; = 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');
// セッションを開始します
$db = ADONewConnection('mysql'); "ピザ";
$database="テスト";
$db->Connect($mch, $pwd, $database); select name as ' Name', year as 'age' from t";
// ページャー オブジェクトを生成
$pager = new ADODB_Pager($db, $sql);
// ページごとに 5 つのレコードを表示
$ pager->Render($rows_per_page=5);
?> 結果は次のとおりです:
図 2. 出力 CSV ファイル
CSVファイル出力方法 使用前にtoexport.inc.phpをインポートする必要があります。
include('adodb/adodb.inc.php');
//出力CSVファイル関数の紹介
$db = ADONewConnection('mysql');
$user="piza";
$database="test"; ; Connect($mch, $user, $pwd, $database);
$sql = "「名前」として名前、「年齢」として
$rs = $db->Execute( $ sql);
//CSV 形式を表示
print rs2csv($rs)?>
結果は次のとおりです:
abcde,45
yyy, 20
ppp 34 abcde,0
uyt,58
john ,28
rs2tab を使用する方法は次のとおりです。タブを使用してフィールドを区切ることもできます。
注: false はフィールド名を表示しないことを意味します
結果は次のようになります:
abcde 45
yyy 20
ppp 34
mmm 13
hh 41
rrr 65
kkk 29
miss 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
rr r 65
kkk 29
miso 154
sss 89
abc 18
abcde 0
uyt 58
ジョン 28
次のように rs2tabout を使用して、標準出力 (STDOUT) で結果を表示することもできます。
print rs 2tabout($rs);
実行結果は次のとおりです。結果をコンソールに表示します
は CSV ファイルとして保存することもできます:
//ファイルパス
$path = "/tmp/test.csv"
// 書き込み用にファイルを開きます
; $fhd = fopen($path, "w");
// ファイルが正常に開かれた場合
if ($fhd) {
// 次に CSV に書き込みます
rs2csvfile ($rs, $fhd);
// rs2tabfile($rs, $fhd); も使用できます
// ファイルを閉じる
}
結果は次のとおりです:
[ols3 @p web] $ cat /tmp/test.csv
名前、年齢
abcde,45
yyy,20
ppp,34
mmm,13
hh,41
rrr,6 5
kkk ,29
miso,154
sss,89
abc,18
abcde,0
uyt,58
john,28
16
ADODB は、特定の数のレコードを取り出します。 ADOConnect 関数 SelectLimit を使用すると、特定の数のレコードを取得できます。使用方法は次のとおりです。 SelectLimit ("Select * from t", 3, 1);
// 1 番目以降の 3 レコードを取り出します
// これら 3 つのレコードを表示します
if ($rs) {
while( $ar = $rs->FetchRow() ) {
print $ar['name'] ." . $ar['year']
}
} ;
上記の式は、最初のレコードの後に、2番目、3番目、4番目のレコードを3つ取り出すことを意味します。
結果は以下の通りです:
-----------------------------------------------------
(mysql): select * from t LIMIT 1,3
---------------------------------- -------
注意! SelectLimit の記述方法は、MySQL 構文とはまったく逆です。