我的应用程序正在使用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)
答案 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>