]> granicus.if.org Git - php/commitdiff
Fixed #73959 - lastInsertId fails to throw an exception in pdsql
authorandrewnester <andrew.nester.dev@gmail.com>
Fri, 20 Jan 2017 18:39:45 +0000 (21:39 +0300)
committerJoe Watkins <krakjoe@php.net>
Fri, 20 Jan 2017 20:10:55 +0000 (20:10 +0000)
NEWS
ext/pdo_pgsql/pgsql_driver.c
ext/pdo_pgsql/tests/bug73959.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 5087d564e30e63b7439be9b06c743b5fa0fcee02..2c403ebb8fcd50ed0ed23458100d0fa63142aca4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,10 @@ PHP                                                                        NEWS
 - PDO_Firebird:
   . Implemented FR #72583 (All data are fetched as strings). (Dorin Marcoci)
 
+- PDO_PgSQL:
+  . Fixed bug #73959 (lastInsertId fails to throw an exception for wrong 
+    sequence name). (andrewnester)
+
 - Phar:
   . Fixed bug #70417 (PharData::compress() doesn't close temp file). (cmb)
 
index 7e2c97d82ad073a2022c0294265146ffb798fdb1..b04cadeda9e3155def8309d60f41226e1811ab18 100644 (file)
@@ -391,7 +391,6 @@ static char *pdo_pgsql_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t *
                        (void)PQexec(H->server, "ROLLBACK TO SAVEPOINT _php_lastid_savepoint");
                }
                pdo_pgsql_error(dbh, status, pdo_pgsql_sqlstate(res));
-               *len = spprintf(&id, 0, ZEND_LONG_FMT, (zend_long) H->pgoid);
        }
 
        if (savepoint) {
diff --git a/ext/pdo_pgsql/tests/bug73959.phpt b/ext/pdo_pgsql/tests/bug73959.phpt
new file mode 100644 (file)
index 0000000..c04b4ac
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Bug #73959 (lastInsertId fails to throw an exception)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+require dirname(__FILE__) . '/config.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+require dirname(__FILE__) . '/config.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$db->setAttribute(PDO::ATTR_PERSISTENT, false);
+$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+$db->setAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES, true);
+
+try {
+    $db->lastInsertId('nonexistent_seq');
+    echo "Error: No exception thrown";
+} catch (PDOException $e) {
+    echo "Success: Exception thrown";
+}
+?>
+--EXPECT--
+Success: Exception thrown