summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrewnester <andrew.nester.dev@gmail.com>2017-01-20 21:39:45 +0300
committerJoe Watkins <krakjoe@php.net>2017-01-20 20:10:55 +0000
commit21ac79e94bd0335bf885b807e09c4d86d75d776a (patch)
tree338c393d034bcdb6f0e7be06d2efc548bd74d6d3
parent2e3d68ed1ba9097d1b8ac64c2a5af7004faa2796 (diff)
downloadphp-git-21ac79e94bd0335bf885b807e09c4d86d75d776a.tar.gz
Fixed #73959 - lastInsertId fails to throw an exception in pdsql
-rw-r--r--NEWS4
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c1
-rw-r--r--ext/pdo_pgsql/tests/bug73959.phpt27
3 files changed, 31 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 5087d564e3..2c403ebb8f 100644
--- 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)
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 7e2c97d82a..b04cadeda9 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -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
index 0000000000..c04b4acd52
--- /dev/null
+++ b/ext/pdo_pgsql/tests/bug73959.phpt
@@ -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