如果连接断开或超时,请刷新数据库连接

时间:2013-04-26 10:05:36

标签: database symfony database-connection multiple-databases

我有一个Symfony命令行任务,它习惯于删除mysql连接。

它是一项数据导入任务。从多个连接中获取数据。它不是一个大问题,而是一些较小的问题。

它似乎在第一次运行时丢弃了连接。大约一半的脚本。然而,它第二次运行(从头开始)它总是完成任务。

它没有超时查询,因为我得到的错误响应是连接已被删除,并且它自己运行正常。因此,我认为它的某种超时问题在第二次运行时由于查询缓存加速了脚本而被避免。

所以我的问题是如何刷新数据库连接?

  

[学说\ DBAL \ DBALException]
  SQLSTATE [HY000]:常规错误:2013查询期间与MySQL服务器的连接丢失

2 个答案:

答案 0 :(得分:12)

另一种方法是通过连接中的ping()方法检查doctrine是否仍然连接到mysql服务器。如果连接丢失,请关闭活动连接,因为它尚未真正关闭并启动新连接。

if(FALSE == $em->getConnection()->ping()){
    $em->getConnection()->close();
    $em->getConnection()->connect();
}

答案 1 :(得分:9)

我猜你的意思是如果由于某种原因连接丢失,就连接到数据库。给定EntityManager,您可以通过以下方式执行此操作:

$success = $_em->getConnection()->connect();

使用getConnection,您正在检索连接对象doctrine使用(Doctrine\DBAL\Connection),这会公开connect方法。

您可以随时拨打connect,因为它会检查已建立连接。如果是这种情况,则返回false。

还有isConnected方法来检查连接是否已建立。您可以使用它来查看连接的确切位置,以便更清楚地了解正在发生的事情。

相关问题