indievox / master-slave-db-access
简单的 MySQL 数据库服务器访问类,使用 POD 及单例模式实现,支持主从架构。 / 简单的 MySQL 数据库服务器访问类使用 PDO 和单例模式,支持主从数据库集群。
0.0.1
2016-03-29 09:02 UTC
Requires
- php: >= 5.3
Requires (Dev)
- phpunit/phpunit: 4.4.1
- satooshi/php-coveralls: v1.0.1
- squizlabs/php_codesniffer: 1.5.6
This package is not auto-updated.
Last update: 2024-09-14 18:20:43 UTC
README
简单的 MySQL 数据库服务器访问类,使用 POD 及单例模式实现,支持主从架构。
简单的 MySQL 数据库服务器访问类使用 PDO 和单例模式,支持主从数据库集群。
用法
使用 composer 安装
composer require indievox/master-slave-db-access:dev-master
包含自动加载
require_once "/path/to/your/vendor/autoload.php"; use iNDIEVOX\MasterSlaveDBAccess\MasterSlaveDBAccess;
配置数据库连接
以下为数据库连接配置示例
$db_config = array( "database_server" => array( "master"=>array( "db_host"=>'localhost', // change to your master host "db_name"=>'homestead', // change to your master database name "db_user"=>'root', // change to your master database username "db_password"=>'' // change to your master database password ), "slave1"=>array( "db_host"=>'localhost', // change to your slave host "db_name"=>'homestead', // change to your slave database name "db_user"=>'root', // change to your slave database username "db_password"=>'' // change to your slave database password ), "slave2"=>array( "db_host"=>'localhost', // change to your slave host "db_name"=>'homestead', // change to your slave database name "db_user"=>'root', // change to your slave database username "db_password"=>'' // change to your slave database password ) ), "slave_database_name" => array( 'slave1', 'slave2' ) );
获取数据库访问实例
$db_obj = MasterSlaveDBAccess::getInstance($db_config);
使用数据库访问实例执行查询
$select_sql = "SELECT id, email FROM user WHERE id=:id "; $param = array( ":id" => '1' ); $query_result = $db_obj->selectCommand($select_sql, $param); foreach ($query_result as $query_result_data) { echo $query_result_data["id"]; echo $query_result_data["email"]; }
当需要时强制读取主数据库
MasterSlaveDBAccess::forceSwitchMaster(); $select_sql = "SELECT id, email FROM user WHERE id=:id "; $param = array( ":id" => '1' ); // select query, but use master only this time $query_result = $db_obj->selectCommand($select_sql, $param); foreach ($query_result as $query_result_data) { echo $query_result_data["id"]; echo $query_result_data["email"]; } $select_sql = "SELECT id, email FROM user WHERE id=:id "; $param = array( ":id" => '1' ); // select query, auto switch to slave(read) $query_result = $db_obj->selectCommand($select_sql, $param); foreach ($query_result as $query_result_data) { echo $query_result_data["id"]; echo $query_result_data["email"]; }
使用 "right" 方法执行查询,类会自动切换到正确的读写连接来处理查询
use iNDIEVOX\MasterSlaveDBAccess\MasterSlaveDBAccess; $db_config = array( "database_server" => array( "master"=>array( "db_host"=>'localhost', "db_name"=>'homestead', "db_user"=>'root', "db_password"=>'' ), "slave1"=>array( "db_host"=>'localhost', "db_name"=>'homestead', "db_user"=>'root', "db_password"=>'' ), "slave2"=>array( "db_host"=>'localhost', "db_name"=>'homestead', "db_user"=>'root', "db_password"=>'' ) ), "slave_database_name" => array( 'slave1', 'slave2' ) ); // init conneciton, use slave(read) connection $db_obj = MasterSlaveDBAccess::getInstance($db_config); $insert_sql = "INSERT INTO user ". "(id, path, is_deleted, create_time, modify_time, delete_time) ". "VALUES ". "(:id, :path, :is_deleted, :create_time, :modify_time, :delete_time);"; $param = array( ":id" => '1', ":path" => 'fukuball', ":is_deleted" => '0', ":create_time" => '2016-12-30 00:00:00', ":modify_time" => '2016-12-30 16:12:18', ":delete_time" => '0000-00-00 00:00:00' ); // insert query, auto switch to master(write) $insert_id = $db_obj->insertCommand($insert_sql, $param); $select_sql = "SELECT * FROM user WHERE id=:id "; $param = array( ":id" => '1' ); // select query, auto switch to slave(read) $query_result = $db_obj->selectCommand($select_sql, $param); foreach ($query_result as $query_result_data) { echo $query_result_data["id"]; echo $query_result_data["email"]; } $update_sql = "UPDATE user SET path='fukuball-lin' WHERE id=:id "; $param = array( ":id" => '1' ); // update query, auto switch to master(write) $affected_rows = $db_obj->updateCommand($update_sql, $param); $delete_sql = "DELETE FROM user WHERE id=:id "; $param = array( ":id" => '1' ); // delete query, auto switch to master(write) $affected_rows = $db_obj->deleteCommand($delete_sql, $param);
有时你希望在整个上下文中使用主服务器
// init conneciton, use slave(read) connection $db_obj = MasterSlaveDBAccess::getInstance($db_config); // switch to master MasterSlaveDBAccess::forceSwitchMasterWholeContext(); $select_sql = "SELECT * FROM user WHERE id=:id "; $param = array( ":id" => '1' ); // select query, but use master $query_result = $db_obj->selectCommand($select_sql, $param); $insert_sql = "INSERT INTO user ". "(id, path, is_deleted, create_time, modify_time, delete_time) ". "VALUES ". "(:id, :path, :is_deleted, :create_time, :modify_time, :delete_time);"; $param = array( ":id" => '2', ":path" => 'punkball', ":is_deleted" => '0', ":create_time" => '2016-12-31 00:00:00', ":modify_time" => '2016-12-31 16:12:18', ":delete_time" => '0000-00-00 00:00:00' ); // insert query, use master $insert_id = $db_obj->insertCommand($insert_sql, $param); $select_sql = "SELECT * FROM user WHERE id=:id "; $param = array( ":id" => '2' ); // select query, but use master $query_result = $db_obj->selectCommand($select_sql, $param);
许可证
MIT 许可证 (MIT)
版权所有 (c) 2016 iNDIEVOX
在此特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用权,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供的人以本软件的方式使用,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵犯版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是在合同行为、侵权行为或其他行为中产生的,也不论这些责任是否与软件或其使用或其他操作有关。