2014-07-14 63 views
1

我見過很多話題開始與該消息,但我找不到與我的問題相關的主題。SQLSTATE [HY000]:一般錯誤與教條2並沒有錯誤

以下是使用錯誤消息創建異常的代碼:「SQLSTATE [HY000]:General error」。我的問題是:除了「一般錯誤」,我什麼都沒有。 實際上,沒有錯誤:據我所知,我想要刪除的行被正確刪除。 如果我在phpMyAdmin中使用查詢,我沒有錯誤。 我想知道爲什麼我有這個錯誤,而everthing似乎沒問題。

public function deleteAllUnused() { 
    try { 
     $rsm = new ResultSetMappingBuilder($this->getEntityManager()); 
     $rsm->addRootEntityFromClassMetadata("\Entity\CataloguePrixDetailProduit", "cpdp"); 
     $sqlRequest = $this->buildDeleteAllUnusedRequest(); 
     return $this->getEntityManager() 
       ->createNativeQuery($sqlRequest, $rsm) 
       ->execute(); 
    } catch (Exception $exc) { 
     throw new Exception($exc->getMessage()); 
    } 
} 

private function buildDeleteAllUnusedRequest() { 
    return 
    "DELETE cpdp.*\n" 
    . "FROM CataloguePrixDetailProduit cpdp JOIN (\n" 
     . "SELECT cpdp2.idCataloguePrixDetailProduit\n" 
     . "FROM CataloguePrixDetailProduit cpdp2\n" 
     . "WHERE cpdp2.idCataloguePrixDetailProduit NOT IN (\n" 
      . "SELECT DISTINCT(cpdp3.idCataloguePrixDetailProduit)\n" 
      . "FROM CataloguePrixDetailProduit cpdp3\n" 
      . "INNER JOIN CatalogueExploitantFournisseur cef ON cpdp3.idCatalogueExploitantFournisseur = cef.idCatalogueExploitantFournisseur\n" 
      . "INNER JOIN CatalogueExploitant ce ON cef.idCatalogueExploitant = ce.idCatalogueExploitant\n" 
      . "INNER JOIN DetailProduitCommandeServiceValide dpcsv \n" 
       . "ON dpcsv.idDetailProduit = cpdp3.idDetailProduit\n" 
       . "AND dpcsv.idFournisseur = cef.idFournisseur\n" 
       . "AND dpcsv.idExploitant = ce.idExploitant\n" 
     . ")\n" 
    . ") r ON r.idCataloguePrixDetailProduit = cpdp.idCataloguePrixDetailProduit"; 
} 

我不明白是哪裏出了問題。我無法保留無故發送錯誤消息的應用程序。

編輯: 這裏是異常堆棧:

[10:02:38][Repository\CataloguePrixDetailProduitRepository][deleteAllUnused] : SQLSTATE[HY000]: General error 

#0 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\library\DoctrineOrm\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php(148): PDOStatement->fetch(2) 
#1 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\library\DoctrineOrm\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php(111): Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAllData() 
#2 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\library\DoctrineOrm\Doctrine\ORM\AbstractQuery.php(747): Doctrine\ORM\Internal\Hydration\AbstractHydrator->hydrateAll(Object(Doctrine\DBAL\Driver\PDOStatement), Object(Doctrine\ORM\Query\ResultSetMappingBuilder), Array) 
#3 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\model\Repository\CataloguePrixDetailProduitRepository.php(107): Doctrine\ORM\AbstractQuery->execute() 
#4 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\controller\CataloguePrixDetailProduitController.php(196): Repository\CataloguePrixDetailProduitRepository->deleteAllUnused() 
#5 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\library\Dispatcher.php(60): CataloguePrixDetailProduitController->ajaxLoadedFlushPrixUnused() 
#6 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\library\Dispatcher.php(11): Dispatcher->callAction(Object(CataloguePrixDetailProduitController)) 
#7 C:\xampp\htdocs\projects\Sogesa\applications\SogesaWeb\webroot\index.php(21): Dispatcher->__construct() 
#8 {main} 

感謝您的時間。

+0

你確定這些是錯誤發生的確切線?你是否在代碼中使用了返回值? - 此錯誤消息的一個可能原因是更新/刪除(非選擇)查詢的結果與僅適用於選擇結果集的函數(例如$ result-> fetchAll())一起使用。也看到這個問題:http://stackoverflow.com/questions/20315898/pdo-error-pdoexception-with-message-sqlstatehy000-general-error?rq=1 – cypherabe

+0

如果這是一個例外,你有它的消息在這裏。抓住它並轉儲堆棧跟蹤以瞭解它發生的位置。通常情況下,deleteAllUnused中的'catch',而不是重新拋出異常,應該這樣做:'echo $ exc-> getMessage()。 「\ n \ n」。 $ exc-> getTraceAsString(); die;'(但僅用於調試,不要保留'echo; die;'在製作中,顯然!) –

+0

@cypherabe:是的,我確定在100%是代碼這引發了這個例外。 – Mortagus

回答

1
To Fix this general issue use DQL statement 
createQuery Instead of using createNativeQuery 

當我嘗試執行使用createNativeQuery刪除查詢,但閱讀本link後,我們把它改成的createQuery我曾面臨這個錯誤,它爲我工作。

+0

你能解釋一下爲什麼嗎? – Marki555

+1

我在嘗試使用createNativeQuery執行刪除查詢時遇到了此錯誤,但在閱讀本[鏈接](http://www.doctrine-project.org/jira/browse/DDC-962)後,我們將其更改爲createQuery,並將其爲我工作。 – rocky

+1

好,所以你應該在答案本身中提及原因,並鏈接到該文檔以獲取更多信息,就像你在評論中所做的那樣。那麼答案將是質量好,並會收到upvotes ... – Marki555

相關問題