search
HomeBackend DevelopmentPHP TutorialThinkPHP3.1 new features: multi-database operations are more complete_PHP tutorial

Normally, if an application only operates the same database (or distributed database), you only need to define the database connection information in the project configuration file. The multi-database operation mentioned here generally refers to operating different databases (including databases of the same type and different types) in one application, and even includes dynamic switching of multiple databases.

For earlier versions of ThinkPHP, switching databases required the use of advanced models, but the current 3.1 version can be solved more easily.

The new version supports multiple data in the following ways. Developers can choose the appropriate method according to the actual situation:

1. Model definition database

If it is just a simple cross-library operation and only a few model classes, you can directly define the dbName attribute in the model class:

protected $dbName = 'top';

When instantiating, remember to use the D method, for example:

$User = D('User');

The premise of this definition is that the current database user account has the permission to operate the top database.

2. Model definition database connection

If your cross-database operation requires using different database connection accounts or connecting to different types of databases, you can directly define the connection attribute in the model class. When operating the model class, it will automatically connect to the specified database. . For example:

protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';

Or use array method to define:

protected $connection = array(
  'db_type' => 'mysql',
  'db_user' => 'root',
  'db_pwd'  => '1234',
  'db_host' => 'localhost',
  'db_port' => '3306',
  'db_name' => 'thinkphp'
 );

If we have configured additional database connection information in the configuration file, for example:

  //数据库配置1
  'DB_CONFIG1' = array(
    'db_type' => 'mysql',
    'db_user' => 'root',
    'db_pwd'  => '1234',
    'db_host' => 'localhost',
    'db_port' => '3306',
    'db_name' => 'thinkphp'
  ),
  //数据库配置2
  'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp';

Then, we can change the attribute definition of the model class to:

//调用配置文件中的数据库配置1
 protected $connection = 'DB_CONFIG1';

or:

//调用配置文件中的数据库配置2
 protected $connection = 'DB_CONFIG2';

The advantage of this method is that it can support different database types, which means it can be different from the database type in the current project configuration file. The disadvantage is that it must be instantiated using the D method and cannot be set dynamically.

3. Model instantiation specifies the connection

The new version supports specifying the database connection when instantiating the model, for example:

$User = new Model('User','think_','mysql://root:1234@localhost/thinkphp'); 

Or instantiate using M method:

$User = M('User','think_','mysql://root:1234@localhost/thinkphp'); 

The second parameter of the M method is the prefix of the data table. If left blank, it means that the data table prefix of the project configuration is used. The third parameter is the database connection information required for the current instantiation.

In the same way, the database connection information passed in during instantiation can also be configured as a name, for example:

$User = M('User','think_','DB_CONFIG2'); 

If the current operation does not require switching the database connection, but only needs to switch the database, you can use:

$User = M('top.User','think_'); 

represents the think_user data table that instantiates the top database. If your data table does not have a prefix, you can use

$User = M('top.User',null); 

represents the user table that instantiates the top database.

4. Dynamically switch connections

The system also provides more flexible dynamic operations. You can use the db method provided by the model class to perform multi-database connection and switching operations. Usage:

Model->db("数据库编号","数据库配置");

The database number is in numeric format. For the database connection that has been called, there is no need to pass in the database connection information, the system will automatically record it. For initialized database connections, the internal database number is 0, so in order to avoid conflicts, please do not define the database configuration with database number 0 again.

The database configuration is defined in the same way as the model definition connection attribute, supporting three formats: array, string, and calling configuration parameters.

After the Db method is called, the current model instance is returned, and you can directly continue to perform other operations on the model, so this method can be dynamically switched during the query process, for example:

$this->db(1,"mysql://root:123456@localhost:3306/test")->query("查询SQL");

This method adds a database connection numbered 1 and automatically switches to the current database connection.

When switching to the same database for the second time, there is no need to pass in the database connection information, you can use it directly:

$this->db(1)->query("查询SQL");

Before switching the database again, all current operations are for the database set by db(1).
If you need to switch to the default database connection, just call:

$this->db(0);

If we have defined other database connection information in the project configuration, we can directly call the configuration in the db method to connect:

$this->db(1,"DB_CONFIG1")->query("查询SQL");
$this->db(2,"DB_CONFIG2")->query("查询SQL");

If the data table is inconsistent with the current one after switching the database, you can use the table method to specify the data table to be operated on:

$this->db(1)->table("top_user")->find();

If you want to return the current database connection, you can directly call the empty db method, for example:

$db = $this->db();

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/825453.htmlTechArticleNormally, if an application only operates the same database (or distributed database), you only need to Just define the database connection information in the project configuration file. Here...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.