アド
序文
あなたはエーテル、私はエーテル、
あなたはエーテル、私はエーテル、エーテル、エーテル、ニーテル、ニーテル -
すべてを中止しましょう
あなたはジャガイモが好きで、私はポタが好きです! -と、
あなたはトマトが好きで、私はトーマトが好きです
ポテト、ポタト、トマト、トマト -
すべてをやめましょう
私はこの曲を聴くのが大好きです。特にルイ・アームストロングとエラのデュエット・バージョン。この作品は、恋する二人が互いに競争することがいかに難しいかを示しており、妥協と共通点を見つける旅についても描かれています。
PHP は、最小限の労力で最も楽しく動的な Web サイトを構築できます。動的な Web サイトを構築するには、データベースを使用してログイン アカウント情報を取得し、動的なニュースを公開し、ディスカッション フォーラムに記事を保存する必要があります。あなたの会社は、利用可能な最も汎用性の高い MySQL データを使用して、あなたの Web サイトを想像以上に有名にする素晴らしい仕事をしました。その後、MySQL が実際のワークロードに対処できなくなったこともわかり、データベース システムを置き換える時期が来ました。
残念ながら、PHP でのすべてのデータベース アクセスは若干異なります。 MySQL に接続するには、mysql_connect() を使用します。Oracle または Microsoft SQL Server にアップグレードする場合は、それぞれ ocilogon() または mssql_connect() を使用する必要があります。さらに悪いことに、リンクごとに使用されるパラメータも異なるということです。
諦めないでください
プログラムの移植性を確保する必要がある場合、ADODB と呼ばれるデータベース パッケージ リンク ライブラリが登場しました。サポートされているすべてのデータベースと通信するための共通 API が提供されるため、諦める必要はありません。
ADODB は、Active Data Object Database の略称です (申し訳ありません! コンピューターをプレイする人は、あまり独創的ではない場合があります)。 ADODB は現在、MySQL、PostgreSQL、Oracle、Interbase、Microsoft SQL Server、Access、FoxPro、Sybase、ODBC、および ADO をサポートしています。ADODB は http://php.weblogs.com/adodb からダウンロードできます。
MySQL の例
PHP で最も一般的なデータベースは MySQL なので、次のプログラム コードが気に入ると思います。データベース名は mydab で MySQL サーバーに接続し、SQL select コマンド クエリを実行して、クエリ結果が 1 つずつ出力されます。
$db = mysql_connect("localhost", "root", "password");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM 従業員",$db);
if ($result === false) die("failed");
while ($fields = mysql_fetch_row($result)) {
for ($i=0, $max=sizeof($fields); $i print $fields[$i].' ;
}
print "
n";
}
上記のプログラム コードは色分けされたセクションに分かれており、最初のセクションは2 番目の段落は SQL コマンドを実行し、最後の段落は結果の各列をスキャンし、for ループは各列のフィールドを表示します。
次のステップは、ADODB プログラム コードを使用して同じ結果を取得することです:
include("adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect( "localhost" , "root", "password", "mydb");
$result = $db->Execute("SELECT * FROM 従業員");
if ($result === false) die("失敗しました");
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i print $result- >fields [$i].' ';
$result->MoveNext();
print "
n";
}
次に、Oracle データベースを指すように変更します。 NewADOConnection('oracle ') になるプログラム コードです。完全なプログラム コードを見てみましょう...
データベースと接続します
include("adodb.inc.php");
$db = NewADOConnection(' mysql');
$db->Connect ("localhost", "root", "password", "mydb");
リンクされたプログラム コードは、元の MySQL プログラム コードよりも洗練されています。洗練された。 ADODB では、オブジェクト指向のアプローチを使用して複数のデータベースの複雑さを管理し、さまざまなクラスを使用してさまざまなデータベースを制御します。オブジェクト指向プログラミングが初めてでも、心配する必要はありません。複雑なことはすべて NewADOConnection() 関数の背後に隠されています。
メモリを節約するために、接続しているデータベースに関連する PHP プログラム コードのみをロードします。これは、NewADOConnection(databasedriver) を呼び出して行います。これには、mysql、mssql、oracle、oci8、postgres、sybase が含まれます。 vfp、access、ibase、その他多くのドライバー。
次に、NewADOConnection() を呼び出して接続クラスから新しいオブジェクト エンティティを生成し、最後に $db->Connect() を使用してデータベースに接続します。
SQL命令を実行する
$result = $db->Execute("SELECT * FROM従業員");
if ($result === false) die("failed");
SQL コマンドをサーバーに直接送信します。正常に実行されると、Execute() は上記の $result オブジェクトを返します。
初心者にとって混乱しやすい問題は、ADODB には接続オブジェクトとレコードセット オブジェクトという 2 種類のオブジェクトがあり、これらのオブジェクトをいつ使用するかということです。
接続オブジェクト ($db) は、データベースへの接続と SQL クエリのフォーマットを担当します。レコードセット オブジェクト ($result) は、結果を取得し、応答データをテキストまたは配列に正規化する役割を果たします。
唯一付け加えておきたいのは、ADODB には INSERT 命令と UPDATE 命令を簡単にする多くの便利な関数が用意されていることです。これについては上級章で説明します。
データを取得
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i print $ result->fields[$i].' ';
$result->MoveNext();
print "
n";
}
データを取得する前述の例は、ファイルの各行について、最初にファイルの終わり (EOF) に達しているかどうかを確認し、まだ終わりに達していない場合は、各列のフィールドをループしてから次の行に移動します (MoveNext)。同じことを繰り返します。
$result->fields[] 配列は PHP データベース拡張システムによって生成されます。一部のデータベース拡張システムでは、配列に名前でインデックスを付けるように強制するには、$ADODB_FETCH_MODE ユニバーサル変数を使用します。
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute('select * from table');
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute('select * from table') ;
print_r($rs1->fields); // array([0]=>'v0',[1] =>'v1') を表示します
print_r($rs2->fields); shows array(['col1']=>'v0',['col2'] =>'v1')
上記の例でわかるように、2 つのレコードセットが保存され、レコードセットが保存されるときに異なるアクセス モードが使用されます。 Execute() によって生成された後、$ADODB_FETCH_MODE を設定します。
ADOConnection
はデータベースに接続されたオブジェクトであり、SQL コマンドを実行し、相関コマンドや日付フォーマット コマンドなどの SQL コマンドを標準フォーマットするためのツール関数のセットを備えています。
その他の便利な関数
$recordset->Move($pos) は、データベース全体の前方スクロールをサポートします。これは問題ではありません。一時レコードをキャッシュに使用することで、後方スクロールをシミュレートできるためです。
$recordset->RecordCount() は、SQL コマンドによってアクセスされたレコードの数を返します。一部のデータベースは、それをサポートしていないため、-1 を返します。
$recordset->GetArray() は結果を配列の形式で返します。
rs2html($recordset) 関数は、渡されたレコードセットを HTML テーブル形式に変換します。関連する使用法は、次の例で太字で示されています。
include('adodb.inc.php');
include('tohtml.inc.php'); /* rs2html 関数が含まれます */
$conn = &ADONewConnection ( 'mysql');
$conn->PConnect('localhost','userid','password','database');
$rs = $conn->Execute('select * from table');
rs2html($rs); /* HTML テーブルへのレコードセット */
ファイルには他にも多くの便利な関数がリストされており、次の URL で見つけることができます: http://php.weblogs.com/adodb_manual
Advancedテーマ
新規および更新
次のデータをデータベースに追加するとします。
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 2001 年 8 月 31 日 */
Note= Sugar それを中止しましょう
別のデータベースに切り替えるとき、新しいデータを追加できない場合があります。
最初の問題は、各データベースが異なるデフォルトの日付形式を使用するのに対し、MySQL は YYYY-MM-DD 形式を使用するのに対し、ADODB は異なるデータベース間で変換するための DBDate() 関数を提供することです。フォーマット。
次の問題は、一重引用符の表現です (使用しないでください)。MySQL では一重引用符を直接使用できますが、Sybase、Access、Microsoft SQL Server などの他のデータベースでは 2 つの一重引用符を使用します。が使用されている場合は (使用しないでください)、qstr() 関数がこの問題を解決できます。
これらの機能はどのように使用しますか?このように:
$sql = "INSERT INTO table (id, thedate,note) 値 ("
. $ID . ','
. $db->DBDate($TheDate) .','
. $ db->qstr($Note).")";
$db->Execute($sql);
ADODB には $connection->Affected_Rows() 関数もあります。これは、最後のデータによって影響を受けたデータを返します。 update または delete コマンド データ列の数、および $recordset->Insert_ID() 関数は、insert コマンドによって自動的に生成された最後のデータ列番号を返します。これら 2 つの関数を提供するデータベースは存在しないことに注意してください。
MetaTypes
レコードセット メソッド FetchField($fieldoffset) を通じてオブジェクトの 3 つの属性 (name、type、max_length) を返すことで、フィールドに関する詳細情報を取得できます。
例:
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
その結果、$f0->name の内容は 'adata'、$f0->type は 'date' になり、max_length が不明な場合はその内容は -1 になります。
異なるデータベースを扱うときの問題の 1 つは、各データベースが同じデータ型に対して異なる名前を持っていることです。たとえば、タイムスタンプ タイプは、あるデータベースでは datetime と呼ばれ、別のデータベースでは time と呼ばれるため、ADODB は MetaType ($type,$) を提供します。 max_length) 関数を使用して、次のデータ型を正規化します:
C: 文字型および varchar 型
X: テキストまたは長い文字 (例: 幅 255 バイトを超える)。
B: BLOB またはバイナリ イメージ
D : 日付
T: タイムスタンプ
L: 論理 (ブール値)
I: 整数
N: 数値 (float、double、money)
前の例では、
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
$type = $recordset->MetaType($f0->type, $f0->max_length);
print $type ; /* 'D を出力する必要があります。 ' */
Select コマンドの Limit と Top のサポート
ADODB には、レコードセットの部分的なコレクションを取得できる $connection->SelectLimit($sql,$nrows,$offset) 関数があり、この利点を採用しています。 Microsoft 製品での SELECT TOP の使用法と、PostgreSQL および MySQL での SELECT...LIMIT の使用法を比較します。元のデータベースがこの使用法を提供していない場合でも、この関数はこの使用法をシミュレートして提供します。
キャッシュのサポート
ADODB を使用すると、ファイル システムにレコードセット データを一時的に保存し、$connection->CacheExecute($secs2cache,$sql) および $connection->CacheSelectLimit($secs2cache,$) で次の関数を実行できます。 sql)、$nrows、$offset) を実行し、時間を節約するために実際にデータベースにクエリを実行する前に、設定された時間間隔に達するまで待機します。
PHP4 セッションのサポート
ADODB は PHP4 セッション ハンドラーもサポートしています。関連する機能については、http://php.weblogs.com/adodb-sessions を参照してください。
商用利用をお勧めします。
販売用の商用 PHP アプリケーション ソフトウェアを作成する予定がある場合は、ADODB を GPL に基づいて公開することもできます。つまり、商用アプリケーション ソフトウェアで合法的に引用し、プログラム コードの所有権を保持することができます。 ADODB の商用利用は強く推奨されており、この理由から社内で ADODB を使用しています。
結論
この記事を読んでくれてありがとう、ここにすべてを終わらせるための完全な歌詞があります。
やめてください
あなたはエーテル、私はエーテル、
あなたはエーテル、私はエーテル、エーテル、エーテル、ニーテル、ニーテル -
すべてをやめましょう
あなたはジャガイモが好きで、私はポタが好きです! -と、
あなたはトマトが好きで、私はトーマトが好きです
ポテト、ポタト、トマト、トマト -
すべてを中止しましょう
でも、もし私たちが電話をかけたら!すべてを終わらせたら、私たちは別れなければなりません
そして、もし私たちが別れることになったら、それは私の心を壊すかもしれません
それで、あなたがパジャマが好きで、私がパジャマが好きなら、私はパジャマを着てプレゼントします。起きてください、パジャマス
私たちはお互いを必要としていることを知っていますので、
すべてを中止したほうがいいです
2番目のリフレイン
あなたは笑いと言い、私は法律を言います
あなたは後だと言い、私は後だと言う
笑って、後、後、
すべてを中止しましょう
あなたはバニラが好き、私はバニラが好き
バニラ、チョコレート、ストロベリー -
すべてを中止しましょう
でも、ああ、もしすべてを中止したら、私たちは別れなければなりません
そして、ああ、もし私たちが別れるなら、それは私の心を壊すかもしれません。
それで、あなたが牡蠣を食べに行き、私がエルスターを食べるなら、私は牡蠣を注文して、エルスターをキャンセルします
私たちはお互いを必要としているので、
中止にしたほうがいいでしょう。すべてを中止してください
映画「Shall We Dance?」でフレッド・アステアとジンジャー・ロジャースによって紹介されたジョージとアイラ・ガーシュウィンの歌と歌詞
オリジナルの英語版: http://php.weblogs.com/adodb_tutorial