在CakePHP中长时间运行shell的数据库连接问题

时间:2014-02-24 10:03:17

标签: php mysql cakephp cakephp-2.3

我在CakePHP应用程序的database.php文件中有以下数据库配置:

    public $default = array(
            'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'login' => 'root',
            'password' => '',
            'database' => 'database',
            'prefix' => '',
    );

除一个队列shell脚本外,一切正常。脚本循环并等待命令运行(例如更新某些报告)。经过一段时间1-2天的数据库数据正在发生变化,但脚本仍然会“看到”旧数据,并且命令结果是错误的。如果我重新启动shell脚本,结果就可以了......几天。

我必须提到我之前在脚本中“丢失了数据库连接”问题,我已经通过每10-15分钟运行来解决它:

 $user = $this->User->find('first');

现在我很担心这会使连接以某种方式持续...

如何重置数据库连接?

编辑: 我只是重构代码来检查我是否可以在模型上将$ cacheQueries设置为false。但是在代码的一些部分我直接使用ConnectionManager,然后才有“缓存”问题。如果我从Model->查询数据库,查找结果是可以的。我需要在很少的地方直接查询性能原因......

  $query = "SELECT COUNT(1) as result
            FROM 
            ......
            ";

$db = ConnectionManager::getDataSource('default');
$result = $db->query($query);

2 个答案:

答案 0 :(得分:1)

尝试将这两个模型属性设置为false:

答案 1 :(得分:1)

@burzum提到的属性$ cacheQueries似乎没有在任何蛋糕模型方法中使用。

但我在DboSource的来源中找到了另一个有趣的事实。

您需要使用DboSource :: query()方法的第二个参数来关闭缓存。如果你想为DboSource :: fetchAll()方法提供额外的参数,那么第三个。

虽然这样可以解决您的问题,但您应该使用CakePHP提供的Model :: find()方法编写查询。

如果严重影响您的表现,则不应使用它们。

func0der