データ|データベース|データベース接続
データベースを扱うページがいくつかあるサイトがあるかもしれません。 PHPLIB を使用したいが、それに対応するために既存のデータベースを変更したくない場合があります。あなたの夢を実現するための答えがここにあります。 PHPLIB と複数のデータベース。
これを達成するには、PHPLIB を拡張する必要があります。この記事では、拡張機能の作成方法について説明します。この記事は、他の方法で PHPLIB を拡張するのに役立つことがわかります。この記事を読んだ後、PHPLIB が必要なことの 98% を達成できる状況について考えてください。
この記事で説明されている PHPLIB 拡張の提案は、PHPLIB 開発チームに提出されました。したがって、これらの拡張機能は将来のリリースで登場する可能性があります。 Web ページ内の他のコードは、データベース管理を整理するのに役立ちます。
データベース管理
すべてのテーブルを巨大なデータベースに配置できます。しかし、ある日それはあなたを刺すでしょう。データベースを管理することでトラウマを最小限に抑えることができます。データベースがサーバーに対して大きすぎる場合はどうなりますか?サーバーが IO スループットを処理できない場合、または処理するのに十分なメモリがない場合はどうなりますか?既存のデータベースを分割するのは困難ですが、別のデータベースから始めるのははるかに簡単で、適切なデータベース管理が役に立ちます。
書店を経営している場合は、おそらく著者のリスト、価格付きのタイトルのリスト、現在の在庫のリスト、注文のリストを持っているでしょう。ビジネスが成長するにつれて、注文リストも増大し、各注文が多くのディスク容量を占有するようになります。可能性の 1 つは、いつか金融システムに直接注文を入れるようになるということです。
今度は別のデータベースで注文を開始します。在庫数量は注文に応じて変化するため、在庫データは同じデータベースに配置されます。
著者リストと参考文献リストは静的な情報であり、よく読まれますが、変更されることはほとんどありません。実際、著者の記録に起こる唯一の変更は 5 年ごとであり、それは著者が新しい本を書いたとき (または亡くなったとき) である可能性があります。このデータは、注文データベースとはまったく異なる構成を使用する場合があります。
PHPLIB を含む
PHPLIB は、DB_Sql というクラスを通じて SQL データベースを操作します。データベースに適切なバージョンをコードに含めます。この例では、MySQL バージョンを使用しています。
コードに DB_Sql を取得するには、PHPLIB で必要なディレクトリに PHPLIB ファイルをインストールします。次に、cgi-bin ディレクトリを見つけて、cgi-bin ディレクトリの下に phplib ディレクトリを作成します。次に、PHPLIB 内のすべての .inc ファイルを phplib ディレクトリにコピーします。最後に、phplib ディレクトリを php.ini ファイルの include_path = 行に配置します。
include_path は、PHP が include() または require() でファイル名を参照する場所です。私の NT ワークステーションでは、インクルード パスは
include_path = ".;i:/project52/includes;i:/project52/phplib";
Linux マシンでは、
include_path = ".;/home /httpd /includes;/home/httpd/phplib";
各 PHP ページの先頭には
require(common.php3);
?>
common.php3 インクルード ディレクトリ各ページに共通するすべてのデータと関数が含まれています。 common.php3 では、
require(db_mysql.inc);
require(auth.inc); です。 inc);
require(page.inc);
(http://phplib.netuse.de) も参照してください。何を含める必要があるかについては、http://www.phpbuilder.com を参照してください。 Db_mysql.inc には、DB_Sql クラスの定義が含まれています。 MySQL を PostGreSQL データベースに変換する場合は、db_mysql.inc を変更して db_pgsql.inc を含めます。そこには、MS SQL、Oracle、Sybase、およびその他のいくつかのデータベースをカバーする 10 の .inc ファイルがあります。
この例では、require() と include() がまったく同じであることに注意してください。 Require() と include() は動作が異なり、コードの途中または if() ステートメントで使用すると結果が異なります。
PHPLIB の拡張
PHPLIB 処理データベースは、DB_Sql クラスから作成されたオブジェクトを通じて実装されます。 Db_mysql.inc には、MySQL 用に変更された DB_Sql クラスが含まれています。 common.php3 の db_mysql.inc を含む行の直後にコードを追加して、DB_Sql を拡張します。
DB_Sql にはクエリ用の関数が多数含まれています。変更したいのは次のとおりです:
/* public: 接続管理*/
function connect($Database = "", $Host = "", $User = "", $Password = "") {
/* デフォルトの処理*/
if ("" == $Database)
$Database = $this->Database;
if ("" == $Host)
$Host = $this-> ;ホスト;
if ("" == $User)
$User = $this->ユーザー;
if ("" == $Password)
$Password = $this->パスワード;
/* 接続を確立し、データベースを選択します*/
if ( 0 == $this->Link_ID ) {
$this->Link_ID=mysql_pconnect($Host, $User, $Password);
if (!$this->Link_ID) {
$ this->halt("pconnect($Host, $User, $Password) が失敗しました。");
return 0
}
if (!@mysql_select_db($Database,$this->Link_ID)) {
$this->halt("データベースは使用できません ".$this->Database);
return 0;
}
return $this->Link_ID; ?>
db_mysql.inc (またはデータベースの .inc ファイル) で connect() 関数を見つけて、db_mysql.inc インクルードの後の common.php3 にコピーします。この記事の最後で説明するように、これをクラス定義にカプセル化する必要があります。
そのコードは読みにくいと思いました。したがって、最初に行うことは、コピーしたコードを読み取り可能にすることです:
/* public: connection Management*/
function connect($Database = "", $Host = "", $User = "" , $パスワード = "") {
/* デフォルト処理*/
if ("" == $Database) {
$Database = $this->Database
}
if ("" == $ホスト) {
$Host = $this->ホスト
}
if ("" == $User) {
$User = $this->
}
if (" " == $Password) {
$Password = $this->Password;
}
/* 接続を確立し、データベースを選択します */
if ( 0 == $this->Link_ID ) {
$this->Link_ID=mysql_pconnect($Host, $User, $Password);
if (!$this->Link_ID) {
$this->halt("pconnect($Host, $ユーザー、$Password) が失敗しました。");
return 0;
}
if (!@mysql_select_db($Database,$this->Link_ID)) {
$this->halt("は使用できませんデータベース ".$this->Database);
return 0;
}
}
return $this->Link_ID;
}
?>
このようにコードを短くします、囲まれたコードの場合、階層により括弧を一致させることができます。こうすることで、括弧の欠落などのエラーを回避できます。個々の行に括弧も追加しました。 PHP では、if ステートメントの後にコードが 1 行しかない場合、括弧を使用せずに実行できます。余分なコードを追加すると、この短縮法は失敗します。後でコードを追加するときにエラーを避けるために、常にかっこを追加することをお勧めします。
今度は、接続コードを変更します。 connect() コードがどのように接続の存在を検出し、接続が存在しない場合には接続を作成するかに注目してください。 connect() 関数は、すべてのデータベース クエリの前に呼び出されます。残念ながら、接続を作成するときにデータベースが選択されるのは 1 回だけです。 PHP ページが複数のデータベースを使用している場合、connect() コードはデータベースの変更を認識しません。
コードを変更するにはいくつかの方法があります。 PHPLIB への影響を最小限に抑え、問題を診断する必要があるときにアクティブなデータベースのステータスを表示できるようにする修正を探しています。 PHPLIB の外部で必要な 2 つの変数は、接続 ID とデータベース名です。したがって、これら 2 つの変数を PHPLIB の外部で表示できるようにします。 common.php3:
$db_connection = 0; // 共通データベース接続 ID
$db_database = ""; // 現在のデータベース名
?> 次に、接続 ID を保存するために PHPLIB を変更します。および データベース名がこれらのフィールドに入力されます。他のコードでも同じフィールドを設定して使用できます。問題を診断するときにどのデータベースが使用されているかを知る必要がある場合は、次のコードをページに挿入します:
Print("
db_database: " . $db_database . "
"); print ステートメントを記述するためのよりクリーンな方法があります。このメソッドは、カラー コード エディターで変数名を強調表示します。このメソッドは、配列やその他の複合変数名でも安定して動作します。)
新しい変数を使用する場合はどうすればよいですか?ヘッダーに追加の行を追加できます。
{
globals $db_connect, $db_database;
/* デフォルトの処理*/
?> この行は外部変数です。 connect() で有効です。
以下はより伝統的な方法です。 $db_database の直後に追加します:
function db_connect($db_connect_host="", $db_connect_user="",$db_connect_pass="") {
globals $db_connect;
if(!empty($db_connect_host)) {
$db_connect = mysql_pconnect($db_connect_host,
$db_connect_user, $db_connect_pass);
return($db_connect)
}
function db_database($db_database_new="");
グローバル$db_database;
if(!empty($db_database_new)) {
$db_database = @mysql_select_db($db_database_new, db_connect());return($db_database);
}
?>
これらの共通関数を一度定義することで、グローバル行をあちこちに追加することなく、さまざまな場所で共通の変数を取得できます。 db 関数を使用した一般的な関数は次のとおりです:
function connect($Database = "", $Host = "", $User = "", $Password = "") {
/* デフォルトの処理 */
if ("" == $Database) {
$Database = $this->Database;
}
if ("" == $Host) {
$Host = $this-> ;ホスト;
}
if ("" == $User) {
$User = $this->ユーザー
}
if ("" == $Password) {
$Password = $this- >パスワード;
}
/* 接続を確立、データベースを選択*/
if ( 0 == db_connect()) {
$this->Link_ID = db_connect($Host, $User, $Password) ;
if (!$this->Link_ID) {
$this->halt("pconnect($User, $Password) が失敗しました。"); }
if (0 != db_connect()) {
if($Database != db_database()) {
$this->Database = db_database($Database))
if(empty( $this- >データベース)) {
$this->halt("データベースを使用できません " . $this->データベース);
}
}
}
return $this-> ;Link_ID;
}
?>
次の小さな変更に注意してください:
接続テストが存在する場合でも、connect() が新しいデータベースを検出できるようにします。はすでに現在の接続です。これは、db_connect() と 0 を 2 回比較することを意味します。その結果、いくつかの小さな変更を加える価値があります。
データベース接続とデータベース選択を PHPLIB の外部に配置し、コード内でデータベース選択が必要な場合と同じ関数を使用できるようにします。
この場合、悪い点が 1 つだけあります。それは、すべてのデータベース操作で同じホスト、ユーザー、パスワードを想定していることです。特定のデータベースを処理するための特別な権限を持つユーザーとしてログインする場合は、この処理用の特別な接続を作成する必要があります。どうやってするの?変数を定義します:
$db_host = "";
$db_pass = ""; ) 関数、比較現在のユーザー名およびホスト名は、特別なユーザーおよびホストと同じです。
$db_type = "";
?>
そして、それを使用して、データベースの種類、MySQL、Oracleなどを保存します。複数のデータベース。
複数のデータベースを処理するようにコードを変更するのは、もう少し複雑です。結合関数と選択関数だけでなく、クエリ関数も変更する必要があります。 PHPLIB の ODBC オプションを使用した PHP の ODBC 接続についてお読みください。 ODBC は多くのデータベースを一般的な方法で処理できますが、速度が遅くなる場合があります。 ODBC を使用すると、複数の種類のデータベースで同じコードを使用できます。複数のデータベース タイプを使用する場合は、異なるデータ形式要件や異なるデータベース間の違いによる問題が発生する可能性があります。 ODBC は接続を簡素化しますが、データベースがデータと SQL を解釈する方法を改善するものではありません。
ここで、派生オブジェクト クラスに関する短いチュートリアルを始めます。 connect() 関数はクラス定義にカプセル化されています:
class DB_Sql {
}
?> この関数を common.php3 にコピーするときは、次のものが必要です。 DB_Sql クラスを派生します。 connect() をカプセル化することでこれを実装します。オブジェクトとクラスのコンテンツについては、を参照してください。 「extends」が何をするのか見てみましょう。最も最小限の言葉で言えば、派生で定義されたものはすべて、元の定義で定義されたものを置き換えるかオーバーライドします。
これでdb_DB_Sqlが使えるようになりました。 PHPLIB をインストールすると、次のように記述されたステートメントが作成されます:
$x = new DB_Sql?> これを次のように変更します。
$x = new db_DB_Sql;
?>
これは元のクラスの代わりに変更されたクラスを使用します。
これであなたはオブジェクト、クラス、OOP の専門家になり、年収 100 を求めることができます。 (外国人は十分勇気がある)
PHPLIB コードへの影響を最小限に抑えながら、効果的な変更を加えました。変更のトレースを記録して、新しいバージョンの PHPLIB で再利用できるようにします。データベース処理中にエラーが発生した場合は、外部関数に print ステートメントを挿入して、接続中に何が起こったかを確認できます。 PHPLIB コードを変更せずに、さらに多くのことを実行できるようになりました。
SQL が失敗したと思われる場合は、db_mysql.inc の DB_Sql から common.PHP3 の db_DB_Sql に qurey() 関数をコピーし、print ステートメントを挿入して SQL の使用状況を確認できます。
PHPLIBはCookieを記録します。 PHPLIB の途中にある print ステートメントにより、HTTP ヘッダー情報の出力に関するエラー メッセージが生成される場合があります。エラーは無視することも、診断情報をディスク ファイルに書き込むこともできます。
次のように始まります:
$db_log_file = "t:/diag.txt";
または、ディスク上のどこかにあるファイルを指すために使用される同様のステートメント。 Windows では、必ず既存のディレクトリを使用してください。そうしないと、奇妙なエラーが発生します
次に、次のように定義します。 a");
fwrite($db_log_f, date("Y m d H:i:s")." ".$db_log_message."rn");
fclose($db_log_f);
}
?>
何が起こったのかを確認する必要があるときは、次のようなログ メッセージを追加してください:
db_log("current database: " . db_database());ロギングテクノロジーとシステムロギングの分野。システム ログを使用する場合、正しいディレクトリを扱っていない可能性があるため、ほんの少しの情報を得るために大量のファイルを検索する必要がある場合があります。この分離されたログにより、テスト中にある程度の制御が可能になります。
db_log("現在のデータベース: " . db_database());
db_log(" 現在のデータベース: " . db_database(); );
?>
PHPLIB データベースにクエリを実行する必要がないように、データベース処理では必ず正しいデータベースを使用してください。データベース関数のラッパー関数を作成したり、使用する関数を変更したりすることもできます。 mysql_query() を使用する場合は、最初に db_database() を使用できます。
db_database("bookcatalogue");
$result = mysql_query("select * from?", db_connect());
$result = と置き換えることもできます。 mysql_db_query(db_database("bookcatalogue"), "select * from?",
db_connect());
?>
function db_query($) db_query_database, $db _query_sql) {
return(mysql_db_query(db_database($db_query_database), $db_query_sql,
db_connect());
}
?>
これで、PHPLIB (および類似のもの) を使用できるようになります。ソフトウェア) 複数のデータベースの操作
クラス/オブジェクトの展開
診断チェックの挿入
ログ情報のファイルへの書き込み
ログ ファイルが動作した後、逆の順序で実行し、次に診断チェック、次にクラスの展開を実行します。 、次に複数のデータベース
。

discuz database error的解决办法有:1、检查数据库配置;2、确保数据库服务器正在运行;3、检查数据库表状态;4、备份数据;5、清理缓存;6、重新安装Discuz;7、检查服务器资源;8、联系Discuz官方支持。解决Discuz数据库错误需要从多个方面入手,逐步排查问题原因,并采取相应的措施进行修复。

Oracle和DB2是两个知名的关系型数据库管理系统(RDBMS),在企业级应用中被广泛使用。在本文中,我们将对Oracle和DB2这两种数据库技术进行比较并进行详细解析,包括其特点、性能、功能和使用示例等方面的分析。一、Oracle数据库技术概述Oracle是由美国甲骨文公司开发的一种关系型数据库管理系统。它被广泛应用于企业级应用中,具有强大的性能、稳定性

IntelArrowLakeisexpectedtobebasedonthesameprocessorarchitectureasLunarLake,meaningthatIntel'sbrandnewLionCoveperformancecoreswillbecombinedwiththeeconomicalSkymontefficiencycores.WhileLunarLakeisonlyavailableasava

Oracle和DB2是两个常用的关系型数据库管理系统,它们都有自己独特的SQL语法和特点。本文将针对Oracle和DB2的SQL语法进行比较与区别,并提供具体的代码示例。数据库连接在Oracle中,使用以下语句连接数据库:CONNECTusername/password@database而在DB2中,连接数据库的语句如下:CONNECTTOdataba

db是“datebase”的缩写,是“数据库文件”的一种格式,是软件用于存放数据的一个文件,相当于数据库,每种软件都有它自己的存放格式。例如Win7系统下的“Thumbs.db”就是缩略图数据文件,所以db文件并不是特定的文件格式。

Oracle和DB2数据库是两个领先的关系型数据库管理系统,它们在企业级应用程序中广泛使用。在实际应用中,数据库的性能往往是评价数据库系统优劣的重要指标之一。本文将对Oracle和DB2数据库的性能进行比较分析,并结合具体的代码示例来展示它们之间的差异。一、Oracle数据库性能分析Oracle数据库是一款功能强大的数据库管理系统,具有良好的可扩展性和稳定性

Oracle和DB2是两种常见的关系型数据库管理系统,它们都有各自独特的特点和优势。本文将对Oracle和DB2进行特点对比,并提供具体的代码示例来说明它们之间的差异。一、Oracle数据库管理系统的特点:存储引擎:Oracle数据库使用了自己独有的存储引擎,称为Oracle数据库引擎(OracleDatabaseEngine),它能够处理大规模的数据存

db是数据库文件格式,是软件用来存储数据的文件,它等效于数据库。每个软件都有其自己的存储格式,即数据的排列方式;一些软件数据文件的后缀是DB。例如Win7系统下的Thumbs.db是缩略图数据文件;因此,db文件不是特定的文件格式。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
