suchen
HeimBackend-EntwicklungPHP-TutorialSo lösen Sie das Problem der Multi-Datenbank-Verbindung in ThinkPHP

So lösen Sie das Problem der Multi-Datenbank-Verbindung in ThinkPHP

Jul 03, 2018 pm 05:27 PM
thinkphpMehrere Datenbankverbindungen解决方法

In diesem Artikel wird hauptsächlich die Lösung von ThinkPHP zur Realisierung einer Verbindung mit mehreren Datenbanken vorgestellt. Freunde, die sie benötigen, können darauf verweisen.

Wenn ThinkPHP die Verbindung mehrerer Daten realisiert und sich die Datenbank auf demselben Server befindet, Das ist alles, was Sie brauchen. Definieren Sie das Modell:

class MembersModel extends Model{
protected $trueTableName = 'members.members'; //数据库名.表名(包含了前缀)
}

Dann können Sie das Modell wie D("Mitglieder"); instanziieren und wie ein normales Modell betreiben.
Aber später stellte sich heraus, dass sich seine Datenbanken auf zwei verschiedenen Servern befanden, sodass die oben beschriebene Methode nicht funktionierte.
Zu diesem Zeitpunkt müssen Sie die Multi-Datenverbindungsfunktion von TP verwenden.

In diesem Zusammenhang haben wir nach Konsultation der offiziellen Dokumentation zum Testen und Korrigieren die folgende Lösung gefunden:

Um eine Multidatenverbindung herzustellen, müssen Sie zunächst die Datenbankkonfigurationsparameter erstellen . Wenn Sie jedoch jedes Mal, wenn Sie eine Verbindung mit mehreren Datenbanken herstellen, ein Datenbankkonfigurationsarray erstellen, ist es sehr mühsam, es in die Konfigurationsdatei zu schreiben. Wie man hier schreibt, erfordert noch einige Fähigkeiten.

<?php
$config= array(
&#39;DEBUG_MODE&#39;=>true,
&#39;default_module&#39;=>&#39;Index&#39;,
&#39;ROUTER_ON&#39;=>TRUE,
&#39;DATA_RESULT_TYPE&#39;=>1,
&#39;SHOW_RUN_TIME&#39;=>true,   // 运行时间显示
&#39;SHOW_ADV_TIME&#39;=>true,   // 显示详细的运行时间
&#39;SHOW_DB_TIMES&#39;=>true,   // 显示数据库查询和写入次数
&#39;SHOW_CACHE_TIMES&#39;=>true,  // 显示缓存操作次数
&#39;SHOW_USE_MEM&#39;=>true,   // 显示内存开销
&#39;HTML_FILE_SUFFIX&#39;=>&#39;.shtml&#39;,  // 默认静态文件后缀
&#39;HTML_CACHE_ON&#39; =>false,   // 默认关闭静态缓存
&#39;HTML_CACHE_TIME&#39;=>60,   // 静态缓存有效期
&#39;HTML_READ_TYPE&#39;=>1,   // 静态缓存读取方式 0 readfile 1 redirect
&#39;HTML_URL_SUFFIX&#39;=>&#39;.shtml&#39;, // 伪静态后缀设置
//默认数据库链接
&#39;DB_TYPE&#39;=>&#39;mysql&#39;,
&#39;DB_HOST&#39;=>&#39;localhost&#39;,
&#39;DB_NAME&#39;=>&#39;news&#39;,
&#39;DB_USER&#39;=>&#39;root&#39;,
&#39;DB_PWD&#39;=>&#39;123&#39;,
&#39;DB_PORT&#39;=>&#39;3306&#39;,
&#39;DB_PREFIX&#39;=>&#39;news_&#39;,
//我的第一个数据库连接
&#39;DB_BBS&#39;=>array(
&#39;dbms&#39; => &#39;mysql&#39;,
&#39;username&#39; => &#39;discuz&#39;,
&#39;password&#39; => &#39;123&#39;,
&#39;hostname&#39; => &#39;localhost&#39;,
&#39;hostport&#39; => &#39;3306&#39;,
&#39;database&#39; => &#39;discuz&#39;
),
//第二个数据库链接,
&#39;DB_NEWS&#39;=>array(
&#39;dbms&#39;=>&#39;mysql&#39;,
&#39;username&#39;=>&#39;root&#39;,
&#39;password&#39;=>&#39;123&#39;,
&#39;hostname&#39;=>&#39;localhost&#39;,
&#39;hostport&#39;=>&#39;3306&#39;,
&#39;database&#39;=>&#39;news&#39;
)
);
return $config;
?>

An dieser Stelle können wir C („DB_BBS“) und C („DB_NEWS“) verwenden, um das Konfigurationsarray der Datenbank abzurufen.
Nach der Konfiguration müssen Sie nun das Modell instanziieren. Da unser Modell zwei verschiedene Datenbankverbindungen verwenden muss, verwendet die Projektkonfigurationsdatei standardmäßig eine Datenbankkonfiguration. Wenn Sie ein Modell einer bestimmten Tabelle wie UserModel.class.php erstellen,
Wenn Sie D("Benutzer") verwenden. ; aber wenn in der aktuellen Standarddatenbank keine Benutzertabelle vorhanden ist, wird ein Fehler gemeldet. Wir werden also ein leeres Modell erstellen. Leere Modelle wählen keine Tabellen aus.
Es gibt zwei Möglichkeiten, ein leeres Modell zu erstellen. Sowohl $dao=D(); als auch $dao=new Model(); sind in Ordnung.

$dao=D();

Nach der Instanziierung des Modells müssen wir ein Datenbankmodell hinzufügen;

$dao->addConnect(C("DB_BBS"),1,true);
$dao->addConnect(C("DB_NEWS"),2,true);

sagte: Schauen Sie sich addConnect() an. Der Prototyp dieser Funktion unterscheidet sich zwischen 1.0.3 und 1.0.4.
Der Prototyp in 1.0.3 ist:

boolean addConnect (mixed $config, mixed $linkNum, [boolean $eqType = true])

Der Prototyp in 1.0.4 ist:

boolean addConnect (mixed $config, mixed $linkNum)

Der dritte Parameter fehlt.
Der erste Parameter ist das Konfigurationsarray der Datenbank und der zweite Parameter ist die Nummer der hinzugefügten Verbindung. Diese Nummer muss beim Umschalten der Datenbankverbindung als Seriennummer der Verbindung angegeben werden. Beachten Sie, dass die integrierte Datenbankverbindungssequenznummer 0 ist, daher sollte die zusätzliche Datenbankverbindungssequenznummer bei 1 beginnen. Der dritte Parameter lautet: Wenn die beiden Datenbanken dieselbe Verbindung haben, ist dies wahr ; >

Nachdem Sie die Datenbankverbindung hinzugefügt haben, können Sie die Datenbankverbindung jederzeit wechseln. Wenn wir zum Beispiel die Datenbank DB_NEWS nutzen wollen, können wir das so schreiben:

$dao->switchConnect(2);

Da die Verbindung zur Datenbank erst hier hergestellt wird und nein Die Tabelle ist ausgewählt, daher besteht der nächste Schritt darin, die Tabelle auszuwählen.

Beachten Sie, dass der Tabellenname hier der vollständige Name ist, der aus dem Tabellenpräfix und dem Tabellennamen besteht. Weil wir im Konfigurationsarray kein Präfix für die Verbindung zur Datenbank haben. Ich denke, es sollte definierbar sein, aber ich weiß es nicht. Das ist es für den Moment.

$dao->table("cdb_members");

Danach können Sie dieses Modell wie ein normales Modell verwenden.

Wenn ich beispielsweise alle Informationen des Benutzers mit der übergebenen ID abfragen möchte:

$map=array("id"=>$_GET["id"]);
$res=$dao->find($map);

Sie können sehen, ob die Abfrage erfolgreich ist.

dump($res);

Wenn Sie jetzt die Datenbanktabelle von DB_BBS verwenden möchten, müssen Sie nur die Verbindung erneut wechseln

$dao->switchConnect(2);

Wählen Sie dann die Tabelle aus, die abgefragt werden soll. Denken Sie daran, dass Sie die Tabelle nach dem Modellwechsel erneut auswählen müssen, da sonst ein Fehler auftritt.

Danach können Sie es wie ein normales Modell bedienen.
Im Folgenden wird auf mehrere Probleme im Handbuch hingewiesen:

1. Beim Instanziieren einer Verbindung mit mehreren Datenbanken wird ein nicht leeres Modell erstellt. (Es scheint, dass ich es falsch geschrieben habe.) Dies kann zu Fehlern führen. Es wird empfohlen, ein leeres Modell zu erstellen.

2. Die Parameter von addConnect() sind in den verschiedenen Versionen unterschiedlich und werden nicht im Handbuch beschrieben.
3 , was nicht in diesem Handbuch enthalten ist.

Angesichts der oben genannten Punkte können ThinkPHP-Benutzer je nach Version entsprechende Anpassungen vornehmen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

ThinkPHP implementiert eine Ajax-ähnliche offizielle Website-Suchfunktion

php float fängt Gleitkommazeichen ohne Rundung ab String-Methode

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Multi-Datenbank-Verbindung in ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Wie erstellen und verwenden Sie eine Schnittstelle in PHP?Wie erstellen und verwenden Sie eine Schnittstelle in PHP?Apr 30, 2025 pm 03:40 PM

Der Artikel erläutert, wie Schnittstellen in PHP erstellt, implementiert und verwendet werden und sich auf ihre Vorteile für die Organisation von Code und die Wartbarkeit konzentriert.

Was ist der Unterschied zwischen Crypt () und Passage_hash ()?Was ist der Unterschied zwischen Crypt () und Passage_hash ()?Apr 30, 2025 pm 03:39 PM

In dem Artikel werden die Unterschiede zwischen CryPT () und Passage_hash () in PHP für Passwort -Hashing erörtert und sich auf ihre Implementierung, Sicherheit und Eignung für moderne Webanwendungen konzentriert.

Wie können Sie Cross-Site Scripting (XSS) in PHP verhindern?Wie können Sie Cross-Site Scripting (XSS) in PHP verhindern?Apr 30, 2025 pm 03:38 PM

In Artikel werden in PHP durch Eingabevalidierung, Ausgabecodierung und Verwendung von Tools wie OWASP ESAPI und HTML-Reinigungsmittel die Verhinderung des Cross-Site-Skripts (XSS) erläutert.

Was ist Autoloading in PHP?Was ist Autoloading in PHP?Apr 30, 2025 pm 03:37 PM

Das Autolading in PHP lädt bei Bedarf die Klassendateien automatisch und verbessert die Leistung durch Reduzierung des Speichergebrauchs und Verbesserung der Codeorganisation. Zu den Best Practices gehört die Verwendung von PSR-4 und das organisierende Code effektiv.

Was sind PHP -Streams?Was sind PHP -Streams?Apr 30, 2025 pm 03:36 PM

PHP -Streams vereinheitlichen die Handhabung von Ressourcen wie Dateien, Netzwerkhöhlen und Komprimierungsformaten über eine konsistente API, die Komplexität abstrahieren und die Flexibilität und Effizienz der Code verbessern.

Wie hoch ist die maximale Größe einer Datei, die mit PHP hochgeladen werden kann?Wie hoch ist die maximale Größe einer Datei, die mit PHP hochgeladen werden kann?Apr 30, 2025 pm 03:35 PM

In dem Artikel wird das Verwalten von Datei -Upload -Größen in PHP erläutert, wobei der Schwerpunkt auf der Standardgrenze von 2 MB und der Erhöhung der PHP.ini -Einstellungen liegt.

Was sind nullbare Typen in PHP?Was sind nullbare Typen in PHP?Apr 30, 2025 pm 03:34 PM

In dem Artikel werden nullbare Typen in PHP erörtert, die in PHP 7.1 eingeführt wurden und ermöglicht, dass Variablen oder Parameter entweder ein angegebener Typ oder ein Null sind. Es zeigt Vorteile wie eine verbesserte Lesbarkeit, Typsicherheit und explizite Absicht und erklärt, wie man deklariert

Was ist der Unterschied zwischen den Funktionen von UnSet () und Unlink ()?Was ist der Unterschied zwischen den Funktionen von UnSet () und Unlink ()?Apr 30, 2025 pm 03:33 PM

Der Artikel erörtert die Unterschiede zwischen UNSET () und Unlink () in der Programmierung und konzentriert sich auf ihre Zwecke und Anwendungsfälle. UnSet () entfernt Variablen aus dem Speicher, während Unlink () Dateien aus dem Dateisystem löscht. Beide sind für Effec von entscheidender Bedeutung

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software