diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/lib/Roundcube/db/sqlsrv.php | 32 |
2 files changed, 33 insertions, 0 deletions
@@ -9,6 +9,7 @@ CHANGELOG Roundcube Webmail - Fix link to closure compiler in bin/jsshrink.sh script (#7567) - Fix bug where some parts of a message could have been missing in a reply/forward body (#7568) - Fix empty space on mail printouts in Chrome (#7604) +- Fix incorrect PDO::lastInsertId() use in sqlsrv driver (#7564) RELEASE 1.4.8 ------------- diff --git a/program/lib/Roundcube/db/sqlsrv.php b/program/lib/Roundcube/db/sqlsrv.php index 7d561e2d7..b41ea6ce7 100644 --- a/program/lib/Roundcube/db/sqlsrv.php +++ b/program/lib/Roundcube/db/sqlsrv.php @@ -27,6 +27,38 @@ */ class rcube_db_sqlsrv extends rcube_db_mssql { + + /** + * Get last inserted record ID + * + * @param string $table Table name (to find the incremented sequence) + * + * @return string|false The ID or False on failure + */ + public function insert_id($table = '') + { + if (!$this->db_connected || $this->db_mode == 'r') { + return false; + } + + if ($table) { + $driver_version = $this->dbh->getAttribute(PDO::ATTR_DRIVER_VERSION); + + // Starting from version 5 of the driver lastInsertId() method expects + // a sequence name instead of a table name. We'll unset the argument + // to get the last insert sequence (#7564) + if (version_compare($driver_version, '5', '>=')) { + $table = null; + } + else { + // resolve table name + $table = $this->table_name($table); + } + } + + return $this->dbh->lastInsertId($table); + } + /** * Returns PDO DSN string from DSN array */ |