Mysql 如何在Apache::DBI中禁用ping?

Mysql 如何在Apache::DBI中禁用ping?,mysql,perl,persistence,dbi,mod-perl2,Mysql,Perl,Persistence,Dbi,Mod Perl2,在Apache::DBI中禁用连接验证时遇到问题 从: Apache::DBI->setPingTimeOut($data\u源、, $timeout) 这将配置ping的使用 方法来验证连接。 将超时设置为0将始终保持不变 使用验证数据库连接 ping方法(默认)。设定 超时

Apache::DBI
中禁用连接验证时遇到问题
从:

Apache::DBI->setPingTimeOut($data\u源、, $timeout)

这将配置ping的使用 方法来验证连接。 将超时设置为0将始终保持不变 使用验证数据库连接 ping方法(默认)。设定 超时<0将取消激活 验证数据库句柄

我尝试使用与
connect()
中相同的$data\u源调用
setPingTimeOut
,但没有成功。是否有人成功禁用了ping?

为了澄清这一点,有:


注意“健全性检查”。因此,大写为“DBI:”的数据源名称的ping超时将被静默忽略。

您可以发布$data\u源吗?(对任何机密都进行了适当的模糊处理。)@martin:I使用以下dsn连接:
DBI:mysql:database=dbname;host=localhost
。我用$timeout=-1尝试了这个,但是没有用。我还在代码中尝试了
dbi:mysql:dbname
,看起来只有与regexp/dbi:\w+:.*/匹配的dsn才能成功注册ping超时。你的第二个dsn看起来似乎有道理。请注意setPingTimeOut函数中的注释“使用没有在中指定属性设置的DSN”。@martin:似乎是这个正则表达式匹配导致了这个问题。我将dsn改为
dbi:mysql:database=dbname;host=localhost
它可以工作。
# use a DSN without attribute settings specified within !
sub setPingTimeOut {
    my $class       = shift;
    my $data_source = shift;
    my $timeout     = shift;

    # sanity check
    if ($data_source =~ /dbi:\w+:.*/ and $timeout =~ /\-*\d+/) {
        $PingTimeOut{$data_source} = $timeout;
    }
}