php 同时修改两个数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 同时修改两个数据库相关的知识,希望对你有一定的参考价值。

我请求某一台服务器上的接口,然后同时修改两台服务器上的某值。
等等等。。。。。
如果我描述的不清楚 请在问。。。

参考技术A 1)首先你会不会修改一个数据,是真正明白操作的修改?
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批量修改数据

PHP 批量修改多条记录的Sql语句写法

php对两个mysql数据表的修改问题?把表A的内容更新到表B里面。

在配置的好的Apache和PHP语言的环境下,如何在Apache目录下htdocs目录下 同时部署两个项目呢?求解.....

可不可以用一条SQL语句同时修改两个表的数据

在php中,用CI框架开发程序,有两个表相连接,可以同时删除两个表相关联的数据吗?怎么写删除的代码?