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

标签 php mysql adodb

我的应用程序使用 ADODB 同时连接到 2 个 MySQL 数据库。应用程序正在下载大文件;花费大量时间,因此发生“mysql has gone away”错误。

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

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

感谢您的宝贵时间!

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

最佳答案

要设置 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 驱动程序条件 block 。 显然,PHP MySQL 客户端仅支持有限的选项,here is the list .你可以试试 MySQLi,它 have more options .

你试过持久连接了吗?

关于php ADODB 在连接到 MySQL 之前调用 mysql_options(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153696/

相关文章:

php - Doctrine MySQL 错误 1045(使用密码 : NO) even though there is a password and it's correct

php - 当点击从高到低时,价格应该改变

javascript - 通过IE、ADODB.Stream将base64文本数据保存为二进制文件到硬盘

iis-7 - IIS7 ADODB VBScript 运行时错误 '800a01ad' Classic ASP - 大量读取,无法解决

vba - 将当前的ADO记录传递给另一个函数

php - Yii:如何为模型设置唯一的表别名

php - 什么时候*不*使用准备好的语句?

mysql - 选择没有任何键的最后一行

php - 具有多对多关系的嵌套 foreach 循环

MySQL方便统计