2

1 つのテーブルからデータを転送し、処理してから Web アプリケーションに適用する cronjob を作成しています。これには 2 つの別個のデータベース接続があります。現時点では、接続資格情報はデータベースが異なることを除いて同じですが、ライブになると完全に分離されます。

問題は、接続を作成し、クラスでそれを $this->staging に割り当て、もう一方は $this->production と呼ばれることです。mysql_ping を使用して、両方の接続が機能していることを確認します。

クエリを実行するときに、接続識別子 ($this->staging の例) を無視し、作成された 2 つの接続の最後のものに対してクエリを実行しようとするように見えます。

クエリ内で接続識別子を使用します。

 // Connection:

 $this->staging = $this->mysql($config['staging']);
 $this->production = $this->mysql($config['production']);

 $sql = "SELECT * FROM TABLE";
 $query = mysql_query($sql,$this->staging);

 // Returns an unknown table in database defined in $this->production.

mysql_select_db() ではなく、$this->mysql() メソッドとして mysql_connect を返します。mysql_select_db() を返そうとすると、mysql_ping が機能しません。

mysql() メソッドは次のとおりです。

// connect(): Connect to a database (MySQL):

private function mysql($cred) {
    $connect = mysql_connect($cred['server'],$cred['username'],$cred['password']);
    if($connect) {
        $db = mysql_select_db($cred['database']);
        if($db) {
            return $connect;
        } else {
            $this->informer("[FATAL]","Could not make a mysql database connection on server ".$_SERVER['SERVER_ADDR']." for database: ".$cred['database']);
        }
    } else {
        $this->informer("[FATAL]","The database credentials appears to be wrong. ".$_SERVER['SERVER_ADDR']." for the mysql database: ".$cred['database']);
    }
}
4

1 に答える 1

1

この問題は、同じMySqlサーバーに接続しているために発生します。ステージング(2番目の接続)に接続すると、PHPは本番環境用に作成されたものと同じ接続を返し、新しい接続を作成せずに、PHPに新しい接続を作成させます。 1つは、「mysql_connect」呼び出しを次のように変更する必要があります。

 $connect = mysql_connect($cred['server'],$cred['username'],$cred['password'], true);

これにより、PHPは新しい接続を開始します。

参照:http ://www.php.net/mysql_connect

于 2012-06-04T15:35:37.720 に答える