1

我们有一个批处理脚本来执行一些这些操作

  1. 从 WHMCS 数据库中获取数据
  2. 对于每一行;如果行需要处理
    1. 连接到数据指定的外部 MySQL 数据库(远程服务器)
    2. 获取和处理相关数据
    3. 近距离远距离连接
    4. 更新 WHMCS 数据库
  3. ...

现在,虽然这很简单,但它在步骤 2.4 的第一行之后中断,因为 WHMCS 没有为其查询指定资源链接,并且建立第二个 mysql 连接会中断默认的 WHMCS 查询。一个简单的代码说明了我的意思:

$result = mysql_query("SELECT * FROM sometable WHERE condition");
while ($row = mysql_fetch_assoc($result)) {
   $conn = mysql_connect($row['mysql_host'], $row['mysql_user'], $row['mysql_pass']);
   ...
   mysql_close($conn);

   mysql_query("UPDATE sometable SET lastrun=NOW() WHERE id={$row['id']}");
}

第二次调用mysql_query以及mysql_fetch_assoc第二次迭代中的调用都将失败。

有没有办法“恢复”以前的连接所以它不会中断?请不要建议在$whmcsmysql任何地方使用资源链接,这不是一个可行的选择,因为我无法修改加密的 WHMCS 源代码,等等。

4

1 回答 1

2

如果您每次都连接到同一台服务器,请将 mysql_connection 和 mysql_close 移到 while 块之外,您不需要为每个查询都保持连接和断开连接。

否则,打开一个到 WHMCS 数据库的单独连接(我不知道 WHMCS 是什么),并指定您在调用 mysql_query 时使用的连接。

$WHMCSConn = mysql_connect($user, $host, $pass);

$uniqueResultVariable = mysql_query("SELECT * FROM sometable WHERE condition", $WHMCSConn);
while ($row = mysql_fetch_assoc($uniqueResultVariable)) {
   $conn = mysql_connect($row['mysql_host'], $row['mysql_user'], $row['mysql_pass']);
   ...
   mysql_query($someQuery, $conn);
   ...
   mysql_close($conn);

   mysql_query("UPDATE sometable SET lastrun=NOW() WHERE id={$row['id']}", $WHMCSConn);
}
mysql_close($WHMCSConn);

另外,我敢肯定有人迟早会在这里留下一个 PDO/mysqli 讲座。

于 2011-08-02T20:17:25.190 回答