2016-02-11 60 views
1

我在我的cli應用程序任務(類似於主應用程序中的控制器行爲)中有以下代碼。然而,我發現有時當我執行這個代碼,我得到如下錯誤。這是建議SQL語句中出現問題的地方。但是,當我檢查和測試,即使它給我一個錯誤數據庫更新成功。所以我想知道這個問題背後的根源是什麼。執行Phalcon在使用Model getDBConnection時PDO類中可能的不一致性

代碼是

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} 

回答

2

我會怪你的配置mysql_nd只有50%的錯誤率,但首先,儘量不要使用Resultset。更新查詢不返回值(12):

$user = new User(); 
$rs = $user->getWriteConnection()->query($phql); 

還可以使用getWriteConnection()一旦你實際上是試圖寫入到數據庫。

如果兩者都沒有幫助,請檢查您的mysql_nd配置。發現HY000錯誤,正確執行腳本時,在我的集羣中配置了一個死的從站。

相關問題