php ADODB在连接MySQL之前调用mysql_options()

时间:2010-01-28 10:14:50

标签: php mysql adodb

我的应用程序正在使用ADODB同时连接到2个MySQL数据库。应用程序正在下载大文件;这需要花费很多时间,因此“mysql已经消失”会发生错误。

我知道MySQL允许使用自动重新连接,可以使用mysql_options()启用,但我不知道如何将此功能应用于ADODB适配器。

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

谢谢你的时间!

PS:可能我应该问如何从$ DB获取DB处理程序变量?如果我可以从ADODO获得DB连接处理程序作为$ handler我可以使用mysql_options($ handler,MYSQL_OPT_RECONNECT,1);但是如果我在连接之前调用mysql_options(),我怎么能得到$ handler(根据MySQL引用http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html

1 个答案:

答案 0 :(得分: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;
  }
}

如果您只将此用于MySQL,则可以省略sqlite驱动程序条件块。 Apparentlt,PHP MySQL客户端仅支持有限选项here is the list。您可以尝试使用MySQLi have more options

您是否尝试过持久连接?<​​/ p>