]> granicus.if.org Git - php/commitdiff
Fixed bug #70313 PDO statement fails to throw exception
authorMatteo Beccati <mbeccati@php.net>
Sun, 10 Jul 2016 11:04:49 +0000 (13:04 +0200)
committerMatteo Beccati <mbeccati@php.net>
Sun, 10 Jul 2016 12:33:56 +0000 (14:33 +0200)
NEWS
ext/pdo_pgsql/pgsql_statement.c
ext/pdo_pgsql/tests/bug70313.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 1fcf2ee74df1f64b32f9868b021a16b2fd831351..282f20d725a1295584ce92ac0719c9616c923c53 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,13 @@ PHP                                                                        NEWS
   . Fixed bug #71144 (Segmentation fault when using cURL with ZTS).
     (maroszek at gmx dot net)
 
-- Filter
+- Filter:
   . Fixed bug #71745 (FILTER_FLAG_NO_RES_RANGE does not cover whole 127.0.0.0/8
     range). (bugs dot php dot net at majkl578 dot cz)
 
+- PDO_pgsql:
+  . Fixed bug #70313 (PDO statement fails to throw exception). (Matteo)
+
 21 Jul 2016, PHP 5.6.24
 
 - Core:
index ff34e48579403220b1ed4671dba8b8d6110d8958..a6e6405a1c510245cecb5d6c647098573f857bbb 100644 (file)
@@ -280,7 +280,7 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *
 
                        case PDO_PARAM_EVT_EXEC_PRE:
                                if (!stmt->bound_param_map) {
-                                       return 0;
+                                       return 1;
                                }
                                if (!S->param_values) {
                                        S->param_values = ecalloc(
diff --git a/ext/pdo_pgsql/tests/bug70313.phpt b/ext/pdo_pgsql/tests/bug70313.phpt
new file mode 100644 (file)
index 0000000..14c3b7b
--- /dev/null
@@ -0,0 +1,37 @@
+--TEST--
+PDO PgSQL Bug #70313 (PDO statement fails to throw exception)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+
+$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+try {
+       $stmt = $db->prepare(");");
+
+       $stmt->execute([1]);
+} catch (PDOException $e) {
+       var_dump($e->getCode());
+}
+
+$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
+try {
+       $stmt = $db->prepare(");");
+
+       $stmt->execute([1]);
+} catch (PDOException $e) {
+       var_dump($e->getCode());
+}
+
+?>
+--EXPECT--
+string(5) "42601"
+string(5) "42601"