WHMCS MySQL и другой MySQL - PullRequest
       7

WHMCS MySQL и другой MySQL

1 голос
/ 02 августа 2011

У нас есть сценарий пакетной обработки, который выполняет несколько этих операций

  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 для этого и т. Д.

1 Ответ

2 голосов
/ 03 августа 2011

Если вы подключаетесь к одному и тому же серверу каждый раз, переместите 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 рано или поздно.

...