当你需要使用多个数据库连接的时候,就需要使用connect方法动态切换到另外一个数据库连接,假设存在另外一个数据库test,并且复制data过去更名为test,然后测试下面的示例:
![](https://box.kancloud.cn/999b16ea37a628459e3a574ef1d1a2e5_640x333.png)
页面Trace的显示信息可以看出来使用了两次数据库连接和执行了三次查询,并且数据库连接切换并没有影响默认的查询(第三个查询还是使用的默认数据库配置连接,test数据库中并不存在data表,如果连接的还是第二个数据库连接的话肯定会报错)。
![](https://box.kancloud.cn/8bddc93b7207232cfbf3bb3a3d68a437_640x171.png)
有时候,我们只需要设置一些基本的数据库配置参数,可以简化成一个字符串格式定义(该格式为ThinkPHP使用规范,而不是PDO连接规范,不要和DSN混淆起来):
> Db::connect('mysql://root@127.0.0.1/demo#utf8') ->query('select * from data where id = 1');
字符串格式的连接信息规范格式如下:
> 数据库类型://用户名[:用户密码]@数据库服务器地址[:端口]/数据库名[?参数
Db类的`connect方法`会返回一个数据库连接对象实例,相同的连接参数返回的是同一个对象实例,除非你强制重新实例化,例如:
![](https://box.kancloud.cn/15b085db0e4aa9232e50b7805154092f_640x256.png)
这样,每次调用都会重新实例化数据库的连接类。为了便于统一管理,你可以把数据库配置参数纳入配置文件,例如在应用配置文件中添加:
![](https://box.kancloud.cn/7b61e9572bd45e584fed4c975d28bebe_640x259.png)
或者使用字符串方式定义'db_config' => 'mysql://root@127.0.0.1/demo',
上面的db_config配置参数不是在数据库配置文件中定义,而是在应用配置文件或者模块配置文件中定义。
然后,使用下面的方式来动态连接获取切换连接
> Db::connect('db_config') ->query('select * from data where id=:id', ['id'=>3]);
当connect方法传入的连接参数是字符串并且不包含/等特殊符号的话,表示使用的是预定义数据库配置参数。