ホームページ >バックエンド開発 >PHPチュートリアル >PHP でデータベース操作をカプセル化する方法
php でのデータベース操作のカプセル化
動的 Web デザインの多くの側面にはデータベース操作が含まれますが、必要に応じて他のバックエンド データベースに切り替えるには、大量のプログラムの変更が必要になる場合があります。これは面倒で時間がかかり、エラーが発生しやすい作業です。実際、PHP のクラスを使用してデータベース操作をカプセル化できるため、作成されたプログラムは非常に小さな変更でバックグラウンド データベースへの変更を完了できます。
これを dbfz.inc にカプセル化し、そのデザインは次のようになります:
class dbInterface{ var $dbID=1; //現在の操作のデータベースを決定するために使用されます。dbID が 1 の場合は MySQL を表し、2 の場合は SQL Server を表し、3 の場合は ODBC を表します。その他。
var $dbHost; //データベースが配置されているホストのドメイン名
var $dbUsername //データベースのユーザー名
var $dbPassWord //ユーザーのパスワード
//ホスト、ユーザー名、パスワード関数を設定します
関数 setParameter($host,$username,$password){
$this->dbUsername=$ユーザー名
$this->dbHost=$host;
$this->dbPassword=$パスワード
} //データベース関数に参加します
関数 dbConnect(){
スイッチ($this->dbID)
{
ケース 1;
return @mysql_connect($this->dbHost,$this->dbUsername,$this->dbPassword);
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
//ライブラリ関数を閉じる
関数 dbClose($dataHandle){
スイッチ($this->dbID)
{
ケース 1;
mysql_close($dataHandle);
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
//SQL文関数を実行
関数 dbQuery($dbName,$sql,$dbHandle){
スイッチ($this->dbID)
{
ケース 1;
@mysql_db_query($dbName,$sql,$dbHandle) を返します
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
//SQL戻り値のカレントレコード関数を取得します
関数 dbFetchrow($dataHandle,$offset=-1){
スイッチ($this->dbID)
{
ケース 1;
@mysql_data_seek($dataHandle,$offset);
@mysql_fetch_row($dataHandle) を返します
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
//取得したレコード番号関数を返す
関数 dbNumrows($dataHandle){
スイッチ($this->dbID)
{
ケース 1;
@mysql_num_rows($dataHandle) を返します
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
//列数を取得する関数を返す
関数 dbNumcols($dataHandle){
スイッチ($this->dbID)
{
ケース 1;
@mysql_num_fields($dataHandle) を返します
ケース 2;
//SQL Server をサポートする関数を使用します
ケース 3;
//ODBCをサポートする関数を使用する
}
}
}
使用説明書は次のとおりです:
dbInterface クラスを使用して、プログラム $test=new dbInterface; にオブジェクトを生成します。
パラメータを設定します
テスト->$dbユーザー名 ;ユーザー名
テスト->$dbパスワード
テスト->$dbHost;ホスト
void setParameter(文字列ホスト、文字列ユーザー名、文字列パスワード);
データベース接続: dbhandle test->dbConnect();
戻り値: fasle、データベース接続エラー
>0、データベース接続ハンドル
データベースを閉じる: void test->dbClose(dbhandle);
テーブル操作: int test->dbQuery(string データベース名, string sql, dbhandle); SQL ステートメントを実行します
戻り値: false、SQL実行エラー
>0、SQL は正しく実行され、SQL 戻り値を指します。
データ操作: int test->dbFetchrow(dataHandle, int offset); 実行が成功すると、ポインターは次のレコードに移動します。
int test->dbNumrows(dataHandle); SQL(主にSELECT文)実行後に取得したレコード数を取得します
int test->dbNumcols(dataHandle); SQL実行(主にSELECT文)後に取得したレコードフィールド数を取得します
ここで例を挙げて説明します:
データベースは MQSQL を使用します。ホスト名は「localhost」、ユーザー名は「root」、パスワードは「」です。
mysql には testdb データベースと table1 があり、このテーブルには name と pay の 2 つのフィールドが含まれています。
-----
<ヘッド>
require("testdb.inc"); //dbInterface クラスをロードします
$test = new dbInterface;//クラス dbInterface を使用してオブジェクトを生成します
$test->setParameter("localhost","root","") //データベースパラメータを設定します
$db = $test->dbConnect();//データベースに接続します
$Query = "SELECT name,pay FROM table ";// SQL ステートメントを設定します
$temp_result = $test->dbQuery("testdb",$Query,$db); //データマスターデータベース操作を実行します
エコー "
";
$ls_num = $test->dbNumrows($temp_result) //クエリ結果のレコード数を取得します
$ls_num をエコーします。
エコー "
";
if (ls_num>0 )
{
$ls_col = $test->dbNumcols($db) //テーブル内の列数を取得します
;
エコー $ls_col
エコー "
";
$cate_result=$test->dbFetchrow($temp_result,0);//レコード番号の最初の行を取得します
$hcid=$cate_result[0];//name の値を取得します
$hcate=$cate_result[1];//支払いの値を取得します
エコー $hcid
エコー「
」;
$hcate をエコーします。
}
?>
<アドレス>アドレス>