使用模型 getDBConnection 时 PDO class 中的 Phalcon 可能不一致
Phalcon Possible Inconsistancy in PDO class when using Model getDBConnection
我的 cli 应用程序任务中有以下代码(类似于主应用程序中的控制器行为)。但是我发现有时当我执行这段代码时会出现如下错误。这表明 SQL 语句中出现了问题。然而,当我检查和测试时,即使它给我一个错误,数据库更新也是成功的。所以我想知道这个问题背后的根本原因是什么。
要执行的代码是
public function updateUserCountsAction(){
try{
$phql="UPDATE `user` u JOIN
(
SELECT COUNT(`user_to`) AS fav_count, user_to
FROM `users_favorite`
GROUP BY `user_to`
) uf
ON uf.user_to = u.user_id
SET u.fav_count = uf.fav_count;";
$user = new User();
$rs = new Phalcon\Mvc\Model\Resultset\Simple(null, $user, $user->getReadConnection()->query($phql));
}
catch(\Exception $e){
$this->error($e);
}
}
这是我偶尔会遇到的错误,大约有 50% 的时间。我想知道为什么 ?但是即使我收到此错误,SQL 的执行似乎也会更新数据库。
========================================
2016-02-11 18:40:42:
PDOException: SQLSTATE[HY000]: General error
File=/var/www/vhosts/example.com/httpdocs/apps/cliend/tasks/CronTask.php
Line=240
#0 [internal function]: PDOStatement->fetchAll()
#1 [internal function]: Phalcon\Db\Result\Pdo->fetchAll()
#2 [internal function]: Phalcon\Mvc\Model\Resultset->__construct(Object(Phalcon\Db\Result\Pdo), NULL)
#3 /var/www/vhosts/example.com/httpdocs/apps/cliend/tasks/CronTask.php(240): Phalcon\Mvc\Model\Resultset\Simple->__construct(NULL, Object(LXY\Models\User), Object(Phalcon\Db\Result\Pdo))
#4 [internal function]: CronTask->updateUserCountsAction()
#5 [internal function]: Phalcon\Dispatcher->dispatch()
#6 /var/www/vhosts/example.com/httpdocs/apps/cliend/console.php(94): Phalcon\Cli\Console->handle(Array)
#7 {main}
我会责怪你的 mysql_nd 配置只有 50% 的错误率,但首先,尽量不要使用 Resultset。更新查询不 return 值 (1,2):
$user = new User();
$rs = $user->getWriteConnection()->query($phql);
在实际尝试写入数据库时也使用 getWriteConnection()
。
如果两者都没有帮助,请检查您的 mysql_nd 配置。在我的集群中配置了一个死奴隶时,正确执行脚本发现 HY000
错误。
我的 cli 应用程序任务中有以下代码(类似于主应用程序中的控制器行为)。但是我发现有时当我执行这段代码时会出现如下错误。这表明 SQL 语句中出现了问题。然而,当我检查和测试时,即使它给我一个错误,数据库更新也是成功的。所以我想知道这个问题背后的根本原因是什么。
要执行的代码是
public function updateUserCountsAction(){
try{
$phql="UPDATE `user` u JOIN
(
SELECT COUNT(`user_to`) AS fav_count, user_to
FROM `users_favorite`
GROUP BY `user_to`
) uf
ON uf.user_to = u.user_id
SET u.fav_count = uf.fav_count;";
$user = new User();
$rs = new Phalcon\Mvc\Model\Resultset\Simple(null, $user, $user->getReadConnection()->query($phql));
}
catch(\Exception $e){
$this->error($e);
}
}
这是我偶尔会遇到的错误,大约有 50% 的时间。我想知道为什么 ?但是即使我收到此错误,SQL 的执行似乎也会更新数据库。
========================================
2016-02-11 18:40:42:
PDOException: SQLSTATE[HY000]: General error
File=/var/www/vhosts/example.com/httpdocs/apps/cliend/tasks/CronTask.php
Line=240
#0 [internal function]: PDOStatement->fetchAll()
#1 [internal function]: Phalcon\Db\Result\Pdo->fetchAll()
#2 [internal function]: Phalcon\Mvc\Model\Resultset->__construct(Object(Phalcon\Db\Result\Pdo), NULL)
#3 /var/www/vhosts/example.com/httpdocs/apps/cliend/tasks/CronTask.php(240): Phalcon\Mvc\Model\Resultset\Simple->__construct(NULL, Object(LXY\Models\User), Object(Phalcon\Db\Result\Pdo))
#4 [internal function]: CronTask->updateUserCountsAction()
#5 [internal function]: Phalcon\Dispatcher->dispatch()
#6 /var/www/vhosts/example.com/httpdocs/apps/cliend/console.php(94): Phalcon\Cli\Console->handle(Array)
#7 {main}
我会责怪你的 mysql_nd 配置只有 50% 的错误率,但首先,尽量不要使用 Resultset。更新查询不 return 值 (1,2):
$user = new User();
$rs = $user->getWriteConnection()->query($phql);
在实际尝试写入数据库时也使用 getWriteConnection()
。
如果两者都没有帮助,请检查您的 mysql_nd 配置。在我的集群中配置了一个死奴隶时,正确执行脚本发现 HY000
错误。