13

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

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

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

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

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

[Doctrine\DBAL\DBALException]
SQLSTATE[HY000]: 一般错误: 2013 Lost connection to MySQL server during query

4

2 回答 2

17

另一种方法是通过连接中的方法检查Doctrine是否仍然连接到MySQL服务器ping()。如果连接丢失,请关闭活动连接,因为它还没有真正关闭并开始一个新连接。

if(FALSE == $em->getConnection()->ping()){
    $em->getConnection()->close();
    $em->getConnection()->connect();
}
于 2015-09-18T09:45:02.727 回答
12

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

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

使用getConnection,您正在检索连接对象学说使用 ( Doctrine\DBAL\Connection),它公开了该connect方法。

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

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

于 2013-05-06T06:49:00.847 回答