1

私のアプリケーションは、ADODB を使用して 2 つの MySQL DB に同時に接続しています。アプリケーションが大きなファイルをダウンロードしています。時間がかかるので「mysql has gone away」というエラーが発生します。

MySQL では mysql_options() を使用して有効にできる自動再接続を使用できることは知っていますが、この機能を ADODB アダプターに適用する方法がわかりません。

    $DB = NewADOConnection('mysql');
    $DB->Connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_DBNAME);

ありがとうございました!

PS: おそらく、$DB から DB ハンドラ変数を取得する方法を尋ねる必要がありますか? $handler として ADODO から DB 接続ハンドラを取得できれば、mysql_options($handler, MYSQL_OPT_RECONNECT, 1); を使用できます。しかし、接続前に mysql_options() を呼び出す必要がある場合、どうすれば $handler を取得できますか (MySQL リファレンスhttp://dev.mysql.com/doc/refman/5.0/en/mysql-options.htmlによると)

4

1 に答える 1

0

mysqlオプションを設定するには、dsnを使用できます。これは私がいつも使用している接続テンプレートです。

$options = '';
if ($driver == 'mysql' OR $driver == 'mysqli')
{
  if ($params['pconnect'] === TRUE)
  {
    $options .= '?persist';
  }
  $flags = MYSQL_CLIENT_COMPRESS;
  $options .= (empty($options)?'?':'&')."clientflags=$flags";
}

$dsn = "{$driver}://{$username}:{$password}@{$hostname}/{$database}{$options}";

if ($driver == 'sqlite')
{
  if ($params['pconnect'] === TRUE)
  {
    $options = '?persist';
  }
  $database = urlencode($database);
  $dsn = "{$driver}://{$database}{$options}";
}

$adodb =& ADONewConnection($dsn);

if ($adodb)
{
  //set fetch mode
  $adodb->SetFetchMode(ADODB_FETCH_BOTH);

  //character set
  if ($driver == 'mysql' OR $driver == 'mysqli')
  {
    if (isset($params['char_set']) AND $params['char_set']
        AND isset($params['dbcollat']) AND $params['dbcollat'])
    {
      $charset    = $adodb->qstr($params['char_set']);
      $collation  = $adodb->qstr($params['dbcollat']);
      $adodb->Execute("SET NAMES $charset COLLATE $collation");
    }
  }
  if ($debug)
  {
    @ob_start();
    $adodb->debug = TRUE;
  }
}

sqliteこれをMySQLにのみ使用する場合は、ドライバー条件ブロックを省略できます。Apparentlt、PHP MySQLクライアントは限られたオプションのみをサポートします、ここにリストがあります。MySQLiを試すことができます、それはより多くのオプションがあります

持続的接続を試してみましたか?

于 2010-01-31T04:43:05.140 に答える