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 構文とはまったく逆です。