如何确定Perl DBI数据库处理程序的连接状态(是连接opend)?像.NET SqlConnection.State == Open这样的东西.可能是这样的
defined($dbh->do("some nop sql"))
Run Code Online (Sandbox Code Playgroud)
但是找不到sql nop语句来使用.
Ven*_*tsu 12
如果通过调用连接,您可以询问数据库句柄
$dbh->ping();
Run Code Online (Sandbox Code Playgroud)
有些DB驱动程序没有实现,ping但DBD :: mysql没有.另一种方法是运行像select 1MySQL 这样的空选择.我正在假设MySQL,因为这是你的问题被标记的方式.其他数据库的答案会略有不同.
小智 5
这个答案分为两部分.
第一个答案是该{Active}领域.perldoc DBI说:
所有手柄都有共同点
这些属性对于所有类型的DBI句柄都是通用的.[...]
"活动"(布尔值,只读)
如果句柄对象为"活动",则"活动"属性为true.这在应用程序中很少使用.活跃的确切含义目前有些模糊.对于数据库句柄,它通常意味着句柄连接到数据库("$ dbh-> disconnect"将"Active"设置为off).
这可能就是你要检查的内容.
第二个答案是,虽然你可以打电话ping(),或检查结果SELECT 1,但没有多大意义.这确实会告诉您在检查时是否连接了数据库句柄.但是你真正想知道的是,当你做下一个即将做的事情时,数据库句柄是否已连接,对吧?并且总是有可能在您的支票和您实际想要做的事情之间连接失败.因此,其中任何一个的真实结果都不是任何保证.
如果您正在进行状态监控,那么a ping()或SELECT 1将会很好.但是,在应用程序中,在执行某些操作之前不要检查dbh的有效性.只需连接,然后使用你回来的dbh,并在每一步都进行适当的错误检查.正确检查错误是无可替代的.