アド
はじめに
なぜデータベース クラス ライブラリを使用するのですか?
初心者 (および一部の初心者以外) がよく犯す間違いは、アプリケーション開発時に将来のことを考慮していないことです。ある日、プログラムで別のデータベースを使用する必要が生じた場合、このバージョンのデータベース用にプログラムを書き直す必要がありますか?特に現在のデータベースが現在のニーズに適していない場合には、このようなことが起こる可能性はあります。 しかし、これをすべて実行してみると、思っているほど簡単ではないことがわかります。各 DBMS には異なる機能があるからです。たとえば、Mysql ではデータベースに接続する関数は mysql_connect() ですが、MSSQL では mssql_connect() です。すべてのコードを再検討し、データベース上で動作するすべての関数とクエリ構文を変更するのは、決して簡単な作業ではありません。プログラムは多くの場合、間違ったデータベースに関連付けられており、実行時に最適なパフォーマンスを達成できません。こうしてデータベース クラス ライブラリが誕生しました。同じコードで異なるデータベースを操作できるようになります。適切に設計されたデータベース クラス ライブラリは、このすべてを完全に変えることができます。これにより、最小限の変更で他のデータベースに切り替えることができます。接続するデータベース管理システムに関係なく、同じ関数と異なるパラメーターを使用するだけです。たとえば、ADOdb では、$db = NewADOConnection('access ') を $db = NewADOConnection('mysql') に変更するだけで、プログラムを Access データベースからデータベース内の Mysql に簡単に転送できます。現在、インターネット上には Pear や PHPlib などのデータベース ライブラリが多数あり、私も仕事で使用したことがありますし、おそらくあなたも使用したことがあるでしょう。ただし、この記事では、私にとって特に興味深い ADOdb にのみ焦点を当てます。この記事では、次のプロジェクトの開発にすぐに使用できるように、簡単な紹介のみを行います。今後の記事では、徐々に理解を深めていきます。
現在、ADOdb は、MySQL、PostgreSQL、Interbase、Firebird、Informix、Oracle、MS SQL 7、Foxpro、Access、ADO、Sybase、FrontBase、DB2、および汎用 ODBC を含むデータベースをサポートしています。
ADOdb のインストール
ADOdb のインストールは非常に簡単な作業で、賢い方であれば難しくないと思います。
まず、PHP バージョン 4.0.4 以降を実行していることを確認してください。 そうでない場合は、アップグレードすることを強くお勧めします。
PHP Everywhere サイトから .zip または .tgz ファイルをダウンロードし、選択したパスに解凍します。
このパスは Web ディレクトリ (WWWTREE、翻訳者注: Web ページが /www/ の下にある場合、このディレクトリは /www/here であってはなりません) の下にあってはなりません。 ADOdb のインクルード ファイルには .inc.php 拡張子が使用されているため、最悪の構成でもサーバーはこれらの .inc ファイルをブラウザにクリア テキストで表示しませんが、これを配置する動作を推奨したことはありません。 Web ページディレクトリ内のライブラリ関数ファイル。次に、ダウンロードしたファイル tar -zxvf adodb350.tgz を実行して解凍します。Windows では、お気に入りの解凍ソフトウェアを使用して、多くのサブディレクトリを含む adodb ディレクトリを取得できます。
インストールをテストします
さて、インストールをテストしましょう。 次の 3 行のコードをスクリプトに追加して、インストールが成功したかどうかをテストします。コード内のパラメータを独自のものに変更する場合は注意してください。
include("$adodb_path/adodb.inc.php"); // adodb ライブラリが含まれます
$db = NewADOConnection('$database_type') // 新しい接続
$db->Connect(" ", "$user", "$password", "$database_name");
これで、データベース接続オブジェクト $db が完成しました。 NewADOConnection の代わりに ADONewConnection を使用することもできます。これら 2 つは同じ関数の異なる名前です。 接続されたデータベース変数 $database_type は、実際の状況に基づいて必要なものに変更する必要があります。次のリストのいずれかを使用できます (括弧内は説明であり、コード内では使用しないでください):
access (Microsoft Access/Jet)
ado (汎用 ADO、他のすべての ADO ドライバーのベース)
ado_access (ADO を使用した Microsoft Access/Jet)
ado_mssql (ADO を使用した Microsoft SQL Server)
db2 (DB2)
vfp (Microsoft Visual FoxPro)
fbsql (FrontBase)
ibase (Interbase 6 以前)
firebird (Firebird)
informix72 (Informix 7.3 より前の Informix データベース)
informix (Informix)
maxsql (トランザクション サポート付きの MySQL)
mssql (Microsoft SQL Server 7)
mssqlpo (ポータブル mssql ドライバー)
mysql (トランザクション サポートなしの MySQL)
mysqlt (トランザクション サポート付きの MySQL) 、maxmysql と同一)
oci8 (Oracle 8/9)
oci805 (Oracle 8.0.5)
oci8po (Oracle 8/9 ポータブルドライバー)
odbc (汎用 ODBC、他のすべての ODBC ドライバーのベース)
odbc_mssql (MSSQL)
odbc_oracle (ODBC 経由の Oracle)
oracle (Oracle 7)
postgres (PostgreSQL)
postgres64 (PostgreSQL 6.4)
postgres7 (PostgreSQL 7、現在は postgres と同一)
sqlanywhere (Sybase SQL Anywhere)
sybase (Sybase)
リンク コードでエラー メッセージが表示された場合は、最初にパス変数またはリンク変数を確認する必要があります。 ADOdb のせいにする前に、これらの変数を正しく使用していることを確認してください。 (多くの友人は、これらの明らかなエラーの修正に多くの時間を費やしすぎます。) 接続にエラー プロンプトが表示されない場合は、プロジェクトで ADodb を使用できます。
スクリプトを通じてデータベースに接続します
上記のコードをコードに追加する前に、一歩下がってみましょう。上記のコードを独自の方法でカプセル化したほうがよいでしょう。これにより、プログラムの柔軟性と移植性が向上します。上記のコードをプロジェクトの各ファイルに直接挿入すると、将来プロジェクトのパスが変更された場合にエラーが発生しやすくなり、すべてのスクリプトを変更する必要が生じる可能性があります。これは、本来の使用目的に影響します。ライブラリ関数。また、パスワード情報が WEBTREE の下にあるため、隠れた危険が生じます。パスワード情報を別のインクルード ファイル、たとえば ADOdb インストール ディレクトリのどこかに置くことをお勧めします。プログラムを別のサーバーで実行している場合、ディレクトリ構造が同じであることは保証できないため、パスが正しいことを確認する必要があります。 PHP の自動インクルード機能を使用して、このファイルを自動的にインクルードすることをお勧めします。
include("$adodb_path/db_values.inc.php");
include("$adodb_path/adodb.inc.php");
$db = NewADOConnection('$database_type');
$db-> Connect("$host", "$user", "$password", "employees");
毎回新しい接続を作成するのではなく、永続的な接続も使用したい場合 (これにより、多くの WEB アプリケーションが高速化されますが、一部のデータベースはこれをサポートしていないことに注意してください)。 Connect の代わりに PConnect を使用できます。
ファイル db_values.inc.php はデータベース情報ファイルで、内容は次のとおりです (次のコードの変数を独自のものに変更する必要があります):
$database_type="mysql";
$host = "localhost"; // ローカル データベース
$user = "ian"
$password = "let_me_in"
?>
設定ファイルを php.ini 設定に自動的に含めるように設定できます。 PHP で変更された .ini の次の行:
; PHP ドキュメントの前後にファイルを自動的に追加します。
auto_prepend_file = /usr/local/build/apache/www/tool_lib/defaults.inc
auto_append_file =
ファイルdefaults.inc には $adbdb_path の値を変更します:
$adodb_path = "/usr/local/build/apache/www/tool_lib/";
?>
それを実現するには他の方法もあります。しかし、私はこれを見つけました。この方法は、移植時の複雑さを比較的軽減できます。
データベースからのSELECT操作
よく開発されたライブラリ関数とPHP自体が提供する関数の両方を使用する場合、データベースにアクセスする方法は数多くあります。どの方法を使用するかは完全にユーザー自身の好みによって異なります。
これは簡単な例です:
$sql = "従業員から姓、年齢を選択";
$rs = &$db->Execute($sql);
if (!$rs) {
print $db - >ErrorMsg(); // 結果が返されなかった場合はエラー メッセージを表示します
}
else {
while (!$rs->EOF) {
print $rs->fields[0].' $rs->fields[1].'
'
// field[0] は姓、fields[1] は年齢です
$rs->MoveNext(); // 次の行に移動します
}
}
上記の例では、$rs->fields は戻り値を含む配列です。配列インデックスには、次のように初期番号が割り当てられます。
$sql = "SELECT 姓、年齢 FROM 従業員";
$db->SetFetchMode(ADODB_FETCH_ASSOC) // 連想配列を返します
$ rs = &$db->Execute($sql);
if (!$rs) {
print $db->ErrorMsg(); // 結果が返されなかった場合はエラー メッセージを表示します
}
else {
while (!$rs->EOF) {
print $rs->fields['surname']." ".$rs->fields['age']."
" rs->MoveNext(); // 次の行に移動します
} // end while
} // end else
結果を参照する別のオプションの方法は、オブジェクトが返されるとして各レコードを表示することです。 ADOdb には、この関数を実装するための FetchNextObject() 関数があり、ポインタは自動的に次のレコードに移動します。
$sql = "従業員から姓、年齢を選択";
$db->SetFetchMode(ADODB_FETCH_ASSOC); // 連想配列を返す
$rs = &$db->Execute($sql);
if (! $rs) {
print $db->ErrorMsg() // 結果が返されなかった場合はエラー メッセージを表示します
}
// 結果をループします
while ($row = $rs->FetchNextObject()) {
// フィールド名は大文字である必要があります
print $row->SURNAME." ".$row->AGE."
";
}
レコードを挿入して更新します
基本的な INSERT 操作は便利で高速であり、構文は SELECT と同じです。
$sql = "従業員 (姓、年齢) の値に挿入 ('Clegg','43')";
if (!($db->Execute($sql))) {
print 'エラーinserting: '.$db->ErrorMsg().'
';
}
ライブラリ関数の本当の利点は、同じ構文を使用してレコードを異なるデータベースに配置できることです。以前は不可能です 絶対に不可能です。通常、2 つのシナリオが発生します。
最初のタイプは引用符です。すべての引用符はキャレット (つまり、` 記号、キーは Tab キーの上にあります) に置き換える必要があります。そうしないと、構文エラーが発生します。ただし、データベースによっては 1 つの一重引用符を使用する場合もあれば、2 つの一重引用符を使用する場合もあります。したがって、PHP のaddslashes() の代わりに、ADOdb で qstr() を使用する必要があります。こうすることで、戻り値は使用しているデータベースと一致します。
2 番目のタイプは日付です。多くのデータベースは、その日付タイプと一貫性がなく互換性のない形式を受け入れます。 ADOdb には、Unix タイムスタンプまたは ISO (Y-m-d) 形式をデータベースのニーズを満たす任意の形式に変換できる DBDate() 関数があります。 以下の例を参照してください:
$employee_surname = $db->qstr("d'Angelo");
$delivery_time = $db->DBDate(time());
// 上記の 2 つの関数は、引用符で囲まれているため、「$delivery_time」ではなく、$delivery_time になります
$sql = "INSERT INTOemployee_delivery (delivery_time,surname) 値 ($delivery_time,$employee_surname)";
if (!($db->Execute( $sql) )) {
print '挿入エラー: '.$db->ErrorMsg().'
';
}
まったく同じ方法でデータベースを更新できます。例:
$sql = "UPDATE 従業員 SET age='44' WHERE id='121')";
if (!($db->Execute($sql))) {
print '更新エラー: '.$db- >ErrorMsg ().'
';
}
上記は Adodb の基本的な操作の一部にすぎません。次回は、ADOdb によって提供されるいくつかのより深い操作に焦点を当てます。 このサイトは ADOdb の専門サイトであり、役立つヘルプ情報がたくさんあります。
この記事の元のアドレス: http://www.databasejournal.com/features/php/article.php/2222651