2011-08-02 6 views
1

我々は幾分行うバッチ処理スクリプトは、これらの操作WHMCS MySQLと別のMySQL

  1. はWHMCSデータベース各行の
  2. からデータをフェッチしています。行が処理に
    1. を必要とする場合、データのへの接続は、外部のMySQLデータベース(リモートサーバー)を指定
    2. フェッチとプロセス関連のデータ
    3. 近い遠い接続
    4. 更新WHMCSデータベース
  3. ...

WHMCSがresoを指定していないため、これは簡単ですが、ステップ2.4の最初の行の後に壊れます2番目のmysql接続を確立すると、デフォルトのWHMCSクエリが中断されます。 簡単なコードは、私が何を意味するかを示しています。2回目の反復でmysql_fetch_assoc

$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への2回目の呼び出しと、一つは両方失敗します。

以前の接続を「復元」して破損しないようにする方法はありますか? $whmcsmysqlリソースリンクをどこにでも使用することを推奨しないでください。暗号化されたWHMCSソースコードを変更することができないため、実行可能なオプションではありません。

答えて

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講義をやめる予定だと確信しています。

+0

私は喜んでPDO(mysqliではなく)または他のOO DBクラスを使用しますが、これはWHMCS(http://whmcs.com/)であり、どのように内部的にコード化されています。 2番目の接続に関しては、行ごとに異なる可能性があり、同じであるという保証はなく、したがってそれを開いて閉じます。スクリプトはcronジョブ(php-cli)として実行されるので、複数の行に対して同じ接続が行われていても、すべての行に対してdb接続を確立するために余分な時間はかかりません。どちらにしても、mysql_fetch_assocで2番目の反復を入力すると、まだ何が示唆されているのでしょうか... –

+0

2つのことがあります。上記で編集した最初のmysql_query()に$ WHMCSConnを指定する必要があります。次に、$ result変数を書き直すことは可能でしょうか?その場合は、上記で編集したmysql_fetch_assoc()の部分に名前を変更してください。 –

+0

私はこの問題を今閉じています。結局、私は接続情報を見つけることができました。層のMySQLへの新しい接続を開いた後は、見つかった接続情報と永続的な接続を使って以前のデフォルト接続を "復元"しました。それは動作します...あなたの入力をありがとう。 –