この記事では、主に複数データベース接続を実現するための ThinkPHP のソリューションを紹介します。必要な友人は参考にしてください。
ThinkPHP が複数データの接続を実現するとき、データベースが同じサーバーにある場合、必要なのはこれだけです モデルを定義します:
class MembersModel extends Model{ protected $trueTableName = 'members.members'; //数据库名.表名(包含了前缀) }
その後、D("Members"); のようにモデルをインスタンス化し、通常のモデルのように動作させることができます。
しかし、後で彼のデータベースが 2 つの異なるサーバー上にあることが判明したため、上記の方法は機能しません。
現時点では、TP のマルチデータ接続機能を使用する必要があります。
これに関して、テストと修正のために公式ドキュメントを参照した後、次の解決策を思いつきました:
マルチデータ接続を確立するには、最初にデータベース構成パラメーターを構築する必要があります。 。ただし、複数のデータベース接続を確立するたびにデータベース構成配列を作成するのは非常に面倒なので、構成ファイルに記述した方がよいでしょう。ここに書くにはまだある程度のスキルが必要です。
<?php $config= array( 'DEBUG_MODE'=>true, 'default_module'=>'Index', 'ROUTER_ON'=>TRUE, 'DATA_RESULT_TYPE'=>1, 'SHOW_RUN_TIME'=>true, // 运行时间显示 'SHOW_ADV_TIME'=>true, // 显示详细的运行时间 'SHOW_DB_TIMES'=>true, // 显示数据库查询和写入次数 'SHOW_CACHE_TIMES'=>true, // 显示缓存操作次数 'SHOW_USE_MEM'=>true, // 显示内存开销 'HTML_FILE_SUFFIX'=>'.shtml', // 默认静态文件后缀 'HTML_CACHE_ON' =>false, // 默认关闭静态缓存 'HTML_CACHE_TIME'=>60, // 静态缓存有效期 'HTML_READ_TYPE'=>1, // 静态缓存读取方式 0 readfile 1 redirect 'HTML_URL_SUFFIX'=>'.shtml', // 伪静态后缀设置 //默认数据库链接 'DB_TYPE'=>'mysql', 'DB_HOST'=>'localhost', 'DB_NAME'=>'news', 'DB_USER'=>'root', 'DB_PWD'=>'123', 'DB_PORT'=>'3306', 'DB_PREFIX'=>'news_', //我的第一个数据库连接 'DB_BBS'=>array( 'dbms' => 'mysql', 'username' => 'discuz', 'password' => '123', 'hostname' => 'localhost', 'hostport' => '3306', 'database' => 'discuz' ), //第二个数据库链接, 'DB_NEWS'=>array( 'dbms'=>'mysql', 'username'=>'root', 'password'=>'123', 'hostname'=>'localhost', 'hostport'=>'3306', 'database'=>'news' ) ); return $config; ?>
この時点で、C ("DB_BBS") と C ("DB_NEWS") を使用してデータベース構成配列を取得できます。
構成後、モデルをインスタンス化する必要があります。私たちのモデルは 2 つの異なるデータベース接続を使用する必要があるため、プロジェクト構成ファイルはデフォルトでデータベース構成になります。UserModel.class.php などの特定のテーブルのモデルを作成する場合、
If you use D(" User") ; ただし、現在のデフォルト データベースに User テーブルがない場合は、エラーが報告されます。そこで、空のモデルを構築します。空のモデルはテーブルを選択しません。
空のモデルを作成するには 2 つの方法があります。 $dao=D(); と $dao=new Model(); は両方とも OK です。
#
$dao=D();
#モデルをインスタンス化した後、データベース モデルを追加する必要があります;
$dao->addConnect(C("DB_BBS"),1,true); $dao->addConnect(C("DB_NEWS"),2,true);
addConnect() を見てください; この関数のプロトタイプは 1.0.3 と 1.0.4 で異なります。
1.0.3 のプロトタイプは次のとおりです:boolean addConnect (mixed $config, mixed $linkNum, [boolean $eqType = true])
1.0.4 のプロトタイプは次のとおりです:
boolean addConnect (mixed $config, mixed $linkNum)
3 番目のパラメータがありません。
最初のパラメータはデータベースの構成配列、2 番目のパラメータは追加された接続の番号です。この番号は、データベース接続を切り替えるときに接続のシリアル番号として指定する必要があります。注組み込みのデータベース接続のシリアル番号は 0 であるため、追加のデータベース接続のシリアル番号は 1 から開始する必要があります。3 番目のパラメーターは、2 つのデータベースが同じ接続である場合、true
; データベース接続を追加した後、いつでもデータベース接続を切り替えることができます。たとえば、DB_NEWS データベースを使用したい場合は、次のように記述できます。
$dao->switchConnect(2);
データベースへの接続はここでのみ確立され、確立されることはありません。テーブルが選択されているため、次のステップはテーブルを選択することです。
ここでのテーブル名は完全な名前、つまりテーブルのプレフィックスとテーブル名を加算したものであることに注意してください。データベースに接続するための構成配列にプレフィックスがないためです。定義できるはずだと思いますが、わかりません。今のところはそれだけです。$dao->table("cdb_members");
その後は、このモデルを通常のモデルと同様に使用できます。
たとえば、渡された ID を持つユーザーのすべての情報をクエリする場合:$map=array("id"=>$_GET["id"]); $res=$dao->find($map);
クエリが成功したかどうかを確認できます。
dump($res);
DB_BBS データベース テーブルを今すぐ使用したい場合は、接続を再度切り替えるだけで済みます。
$dao->switchConnect(2);
次に、テーブル クエリを選択します。モデルを切り替えた後はテーブルを再度選択する必要があり、選択しないとエラーが発生することに注意してください。
以降は通常モデルと同様に操作可能です。以下は、マニュアル内のいくつかの問題を指摘しています:
1. マルチデータベース接続をインスタンス化するときに、空ではないモデルが確立されます。 (私の書き方が間違っていたようです。)これは間違いがあるかもしれません。空のモデルを確立することをお勧めします;
3. 空のモデルを確立した後、テーブルを選択する必要があります、このマニュアルには含まれていません。
上記の点を考慮して、ThinkPHP ユーザーは、さまざまなバージョンに応じて対応する調整を行うことができます。
以上がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
ThinkPHP は、ajax のような公式 Web サイト検索機能を実装します。php float は、浮動小数点文字をインターセプトします。丸め文字列メソッド以上がThinkPHP での複数データベース接続の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

PHPでのオートローディングは、必要に応じてクラスファイルを自動的にロードし、メモリの使用を削減し、コード組織を強化することでパフォーマンスを向上させます。ベストプラクティスには、PSR-4の使用とコードを効果的に整理することが含まれます。

PHPストリームは、一貫したAPIを介したファイル、ネットワークソケット、圧縮形式などのリソースの処理を統合し、複雑さを抽象化し、コードの柔軟性と効率を高めます。

この記事では、PHPでファイルアップロードサイズの管理を管理し、2MBのデフォルト制限とPHP.ini設定を変更してそれを増やす方法に焦点を当てています。

この記事では、PHP 7.1で導入されたPHPのヌル可能なタイプについて説明し、変数またはパラメーターが指定されたタイプまたはnullのいずれかを可能にします。読みやすさの改善、タイプの安全性、明示的な意図などの利点を強調し、宣言する方法を説明します

この記事では、プログラミングのunset()とlink()関数の違いについて説明し、目的とユースケースに焦点を当てています。 unset()はメモリから変数を削除しますが、link()はファイルシステムからファイルを削除します。どちらもEFFECにとって重要です


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









