Просмотр исходного кода

PDO statement exception contains SQL query that caused it

Tomáš Fejfar 12 лет назад
Родитель
Сommit
cdccfddba0
2 измененных файлов с 15 добавлено и 1 удалено
  1. 2 1
      library/Zend/Db/Statement/Pdo.php
  2. 13 0
      tests/Zend/Db/Statement/Pdo/MysqlTest.php

+ 2 - 1
library/Zend/Db/Statement/Pdo.php

@@ -231,7 +231,8 @@ class Zend_Db_Statement_Pdo extends Zend_Db_Statement implements IteratorAggrega
             }
         } catch (PDOException $e) {
             require_once 'Zend/Db/Statement/Exception.php';
-            throw new Zend_Db_Statement_Exception($e->getMessage(), (int) $e->getCode(), $e);
+            $message = sprintf('%s, query was: %s', $e->getMessage(), $this->_stmt->queryString);
+            throw new Zend_Db_Statement_Exception($message, (int) $e->getCode(), $e);
         }
     }
 

+ 13 - 0
tests/Zend/Db/Statement/Pdo/MysqlTest.php

@@ -77,6 +77,19 @@ class Zend_Db_Statement_Pdo_MysqlTest extends Zend_Db_Statement_Pdo_TestCommon
         $this->assertType('PDOStatement', $statement->getDriverStatement());
     }
 
+    public function testStatementExceptionMessageContainsSqlQuery()
+    {
+        $sql = "SELECT * FROM nonexistent";
+        try {
+            $stmt = $this->_db->query($sql);
+        } catch (Zend_Db_Statement_Exception $e) {
+            $message = $e->getMessage();
+            $this->assertContains($sql, $message);
+            return;
+        }
+        $this->fail('Expected exception');
+    }
+
     public function getDriver()
     {
         return 'Pdo_Mysql';