php 同时修改两个数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 同时修改两个数据库相关的知识,希望对你有一定的参考价值。
我请求某一台服务器上的接口,然后同时修改两台服务器上的某值。
等等等。。。。。
如果我描述的不清楚 请在问。。。
2)针对两个数据库各建一个连接,$link1和$link2,然后对后面操作数据库的操作复制一份,采用不同的连接做输入参数,这样就能同时修改两个数据库了。 参考技术B 你是想两个数据库同步?如果是的话可以用webservice来实现. 参考技术C 1 接口向两个库分别写入
或者
2 数据库同步
在代码接收中同时使用两个数据库
【中文标题】在代码接收中同时使用两个数据库【英文标题】:Using two databases at the same time in codeception 【发布时间】:2015-11-21 15:23:56 【问题描述】:如何? 我的 PHP 应用程序使用 SQLite 数据库,但也连接到另一个使用 MySQL 数据库的应用程序。
目前我的 codeception.yml 文件中有这个:
modules:
config:
Db:
dsn: 'sqlite:db.sqlite'
dump: tests/_data/dump.sql
populate: true
cleanup: true
这样,数据库每次都会填充测试数据,并在测试结束时自动清理。 现在如何添加一个具有相同功能的 MySQL 数据库?
另外,如果可能的话,在某些测试中,我会使用“seeInDatabase”函数。我将如何指定它必须查看的数据库?
【问题讨论】:
看着source file 让我想到,开箱即用是不可能的。 【参考方案1】:看看我贡献的一个模块,叫做Codeception MultiDb。
【讨论】:
【参考方案2】:我们实际上可以通过使用 Codeception 扩展类来相当轻松地完成此任务。我们将对 Extensions 进行的操作如下:
使用我们的扩展程序挂钩“测试前”和“测试后”事件 重新配置Db模块指向我们的web服务,重新初始化模块并执行 对每个 Web 服务重复 首先,我们需要首先在验收测试中启用 Db 模块。按照说明设置 Db 模块。这里重要的是我们将填充和清理设置为 false,并且转储指向有效文件。我们将填充和清理设置为 false,因为我们不希望 Db 模块在每次测试后填充和清理。好吧,我们确实这样做了,但默认情况下,Db 模块只与我们需要多个数据库的一个数据库进行通信。
其次,按照说明创建基本的 Codeception 扩展。设置类、配置类并将其包含在引导程序中后,您可以使用以下代码作为指导:
class YourExtensionClass extends \Codeception\Platform\Extension
// events to listen on
static $events = array(
'test.before' => 'beforeTest',
'test.after' => 'afterTest',
);
function beforeTest(\CodeCeption\Event\Test $e)
// get the test and groups
$test = $e->getTest();
$groups = $test->getScenario()->getGroups();
// only restore if annotated to do so
if (in_array('api', $groups))
// get the Db module
$db = $this->getModule('Db');
// re-initialize with web service one api config and execute
$webserviceOneConfig = $this->getWebServiceOneConfig($this->config);
$db->_reconfigure($webserviceOneConfig);
$db->_initialize();
$db->_before($test);
// re-initialize with web service two api config and execute
$webserviceTwoConfig = $this->getWebServiceTwoConfig($this->config);
$db->_reconfigure($webserviceTwoConfig);
$db->_initialize();
$db->_before($test);
function afterTest(\CodeCeption\Event\Test $e)
// get the test and groups
$test = $e->getTest();
$groups = $test->getScenario()->getGroups();
// only restore if annotated to do so
if (in_array('api', $groups))
// get the Db module
$db = $this->getModule('Db');
// re-initialize with web service one api config and execute
$webserviceOneConfig = $this->getWebServiceOneConfig($this->config);
$db->_reconfigure($webserviceOneConfig);
$db->_initialize();
$db->_after($test);
// re-initialize with web service two api config and execute
$webserviceTwoConfig = $this->getWebServiceTwoConfig($this->config);
$db->_reconfigure($webserviceTwoConfig);
$db->_initialize();
$db->_after($test);
private function getWebServiceOneConfig($config)
return array(
'dsn' => 'your first webservice db dsn',
'dump' => '/path/to/your/first/dump/file',
'populate' => true,
'cleanup' => true,
);
private function getWebServiceTwoConfig($config)
return array(
'dsn' => 'your second webservice db dsn',
'dump' => '/path/to/your/second/dump/file',
'populate' => true,
'cleanup' => true,
);
如果让我的扩展设置仅在给定的测试注释正确时触发,即:
// in a Cest
/**
* @group api
*/
public function hereIsSomeTest(WebGuy $I)
...
// in a Cept
$scenario->group('api');
$I = new WebGuy($scenario);
我设置了扩展以遵守“api”注释,因此我不必在每个测试中设置和拆除我的 API 数据库,只需要那些处理数据的数据库。但是,您可以很容易地进行修改以满足您的需要。
【讨论】:
我尝试了这个解决方案,但无法弄清楚如何从测试中访问这两个数据库。以上是关于php 同时修改两个数据库的主要内容,如果未能解决你的问题,请参考以下文章
php对两个mysql数据表的修改问题?把表A的内容更新到表B里面。
在配置的好的Apache和PHP语言的环境下,如何在Apache目录下htdocs目录下 同时部署两个项目呢?求解.....