Php WHMCS-MySQL和另一个MySQL

Php WHMCS-MySQL和另一个MySQL,php,mysql,whmcs,Php,Mysql,Whmcs,我们有一个批处理脚本来执行这些操作 从WHMCS数据库获取数据 每行;如果行需要处理 连接到数据的指定外部MySQL数据库(远程服务器) 获取和处理相关数据 近距离连接 更新WHMCS数据库 现在,虽然这很简单,但它在步骤2.4的第一行之后会中断,因为WHMCS没有为其查询指定资源链接,而建立第二个mysql连接会中断默认的WHMCS查询。一个简单的代码显示了我的意思: $result = mysql_query("SELECT * FROM sometable WHERE conditio

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

  • 从WHMCS数据库获取数据
  • 每行;如果行需要处理
  • 连接到数据的指定外部MySQL数据库(远程服务器)
  • 获取和处理相关数据
  • 近距离连接
  • 更新WHMCS数据库
  • 现在,虽然这很简单,但它在步骤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\u query
    ,第二次调用
    mysql\u fetch\u assoc
    都会失败


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

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

    否则,打开到WHMCS数据库的单独连接(我不知道WHMCS是什么),并指定在调用mysql\u查询时使用的连接

    $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讲座。

    我很乐意使用PDO(但不是mysqli)或其他OO DB类,但这是WHMCS()及其内部编码方式。至于第二个连接,每行的连接可能不同,并且不能保证它是相同的,从而打开和关闭它。由于脚本是作为cron作业(phpcli)执行的,因此我不介意为每一行建立db连接所需的额外时间,即使为一行中的多行建立了相同的连接。不管怎样,当使用mysql_fetch_assoc进入第二次迭代时,您的建议仍然失败……可能有两件事,您应该在我上面编辑的初始mysql_query()中指定$WHMCSConn。第二,是否有可能重写$result变量?如果是这样的话,只需在mysql_fetch_assoc()部分对其进行重命名,我也在上面对其进行了编辑。最后,我设法找到了连接信息,在打开一个到MySQL层的新连接后,我只是使用一个具有找到的连接信息的持久连接来“恢复”以前的默认连接。它是有效的。。。谢谢你的意见。