Poem内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。
目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。
如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
常用的配置方式是在应用配置文件或者模块配置文件中添加下面的配置参数:
//数据库配置信息 'db_type' => 'mysql', // 数据库类型 'db_host' => 'localhost', // 服务器地址 'db_name' => 'phppoem', // 数据库名 'db_user' => 'admin', // 用户名 'db_pass' => '123456', // 密码 'db_port' => 3306, // 端口 'db_charset'=> 'utf8', // 字符集
以上配置信息需要在公共配置文件(app/config.php)或者模块配置文件(app/home/boot/config.php)里面配置。
可以采用PDO的DSN配置就不写上面的一串了,格式为 账号:密码@Pdo_DSN格式,其中账号密码可以为空
如mysql的dsn:
'db_dsn'=> 'root:123456@mysql:host=localhost;port=3306;dbname=phppoem;charset=utf8'
sqlite的dsn:
'db_dsn'=> 'sqlite:zidian_full.db'
分布式数据库连接配置(主从服务器)
需要配置 :'db_deploy' 为true,然后多个服务器使用 ',' ,英文逗号分割,如下有两台机器
//数据库配置信息 'db_deploy' => true, // 部署方式: false 集中式(单一服务器),true 分布式(主从服务器) 'db_type' => 'mysql', // 数据库类型 'db_host' => 'localhost1,localhost2', // 服务器地址 'db_name' => 'phppoem', // 数据库名 'db_user' => 'admin1,admin2', // 用户名 'db_pass' => '123456,654321', // 密码 'db_port' => 3306, // 端口 'db_charset'=> 'utf8', // 字符集
这里默认的情况下读写不分离,如需请看下面的配置
数据库读写是否分离
这个需要和前面 'db_deploy' 为 true 时 一起使用,多台机器才有读写分离嘛。读写分离使用 'db_rw_separate' 为 true
//数据库配置信息 'db_deploy' => true, // 部署方式: false 集中式(单一服务器),true 分布式(主从服务器) 'db_rw_separate' => true, // 数据库读写是否分离 主从式有效 'db_type' => 'mysql', // 数据库类型 'db_host' => 'localhost1,localhost2', // 服务器地址 'db_name' => 'phppoem', // 数据库名 'db_user' => 'admin1,admin2', // 用户名 'db_pass' => '123456,654321', // 密码 'db_port' => 3306, // 端口 'db_charset'=> 'utf8', // 字符集
这里还可以设置读写服务器的数量,默认第一个数据库配置是主服务器的配置信息,负责写入数据。
这里可以配置主服务器的数量。
'db_master_num' => 1, // 读写分离后 主服务器数量 'db_slave_no' => '', // 指定从服务器序号
调用模型的CURD操作的话,系统会自动判断当前执行的方法的读操作还是写操作
如果你用的是原生SQL,那么需要注意系统的默认规则:
写操作必须用模型的exec方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。