gpt4 book ai didi

用于处理多个连接的 PHP 脚本

转载 作者:行者123 更新时间:2023-12-01 00:37:23 25 4
gpt4 key购买 nike

我正在尝试创建一个我可以在 Windows 任务计划程序中定向到的 php 脚本,因为我需要这个作业每 15 分钟运行一次并插入到数据库表中。

我目前的问题是我在 MySQL Workbench 中有一个工作查询,但出于特权原因,我现在需要从只读数据库的表中选择数据并将其插入到我们的生产数据库(不同主机 IP)的表中.

基本上,现在我从主机 1 上的 readTable 中选择并插入到主机 1 上的 writeTable。但是,我需要从主机 1 上的 readTable 中选择/加入并插入到主机 2 上的 writeTable 中,如果这有意义的话。

问题:我不知道如何在 php 文件中使用多个数据库连接,我什至找不到在工作台中执行此操作的方法。

这是带有查询的 php 代码:

        <?php 

$servername = "localhost";
$username = "username";
$password = "password";

$servername2 = "localhost";
$username2 = "username";
$password2 = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);
$conn2 = new mysqli($servername2, $username2, $password2);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

// Check connection2
if ($conn2->connect_error) {
die("Connection failed: " . $conn2->connect_error);
}
echo "Connected successfully";

$data = mysqli_query($conn, "SELECT
c.extension as Extension
,RESPONSIBLEUSEREXTENSIONID as ExtID
, sum(Duration) as Total_Talk_Time_seconds
, round(sum(Duration) / 60,2) as Total_Talk_Time_minutes
, sum(if(LEGTYPE1 = 1,1,0)) as Total_Outbound
, sum(if(LEGTYPE1 = 2,1,0)) as Total_Inbound
, sum(if(Answered = 1,0,1)) as Missed_Calls
, count(DISTINCT b.NOTABLECALLID) as Total_Calls
-- , NOW()
FROM cdrdb.session a
LEFT JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
LEFT join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts >= curdate()
AND c.extension IN (7295,7306,7218,7247,7330,7000,7358)
group by c.extension");

foreach ($data as $d) {

mysqli_query($conn2, "Insert into test.ambition_test(Extension, ExtID, Total_Talk_Time_seconds,Total_Talk_Time_minutes,Total_Outbound, Total_Inbound, Missed_Calls, Total_Calls, Time_of_report )
ON duplicate key update Total_Talk_Time_seconds = values(Total_Talk_Time_seconds), Total_Talk_Time_minutes = values(Total_Talk_Time_minutes), Total_Outbound = values(Total_Outbound), Total_Inbound = values(Total_Inbound)
, Missed_calls = values(Missed_Calls), Total_Calls = values(Total_Calls), Time_of_report = values(NOW())");
}

?>

是否可以创建多个连接并指定在该查询的每个部分使用哪些连接?

最佳答案

连接到您的第一台服务器:

$conn = new mysqli($servername, $username, $password);

连接到您的第二台服务器 - 在单独的变量中定义:

$conn2 = new mysqli($servername2, $username2, $password2);

您可以从第一台服务器获取数据(SELECT),例如

$data = mysqli_query($conn, "SELECT ...");

然后使用保存在 $data 中的数据将 (INSERT) 写入第二台服务器上的数据库,例如

mysqli_query($conn2, "INSERT ...");

您当然需要一个循环来遍历 $data 并在查询中绑定(bind)适当的值。在伪代码中....

foreach ($data as $d) {
// $d is an array of rows from the query done on the first server.
// Because you're in a loop you can deal with this data 1 row at a time and do whatever you want with it
// e.g. write it to the second server's database...
mysqli_query($conn2, "INSERT INTO some_table(v1, v2) VALUES('".$d['v1']."', '".$d['v2']."') ");
}

我使用 PDO 并且不熟悉 mysqli_query 语法。您可能需要绑定(bind)参数(就像您在 PDO 中所做的那样)而不是在查询中引用它们。但是我写的原理是一样的——你循环遍历从第一台服务器获得的数据,然后在一个循环内将它写入第二台服务器。这使您可以处理来自第一台服务器上的查询的每一行数据。

关于用于处理多个连接的 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45507383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com