diff options
| author | Mark Newnham <mark@newnhams.com> | 2026-03-11 03:40:29 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-11 10:40:29 +0100 |
| commit | b3049bb9e3e897e97b61fe52449e9fa31b36e1c4 (patch) | |
| tree | 3078ca487cc48a33d862162fe3d61846cea8185d | |
| parent | ffda4226b953a94a785ca3110d4bfceaf0bb95c1 (diff) | |
| download | adodb-b3049bb9e3e897e97b61fe52449e9fa31b36e1c4.tar.gz adodb-b3049bb9e3e897e97b61fe52449e9fa31b36e1c4.tar.bz2 adodb-b3049bb9e3e897e97b61fe52449e9fa31b36e1c4.zip | |
mssql: fix regression retrieving affected_rows in SQL Server
Retrieves affected rows before connection closed if necessary.
Fixes #606, PR #1216
| -rw-r--r-- | drivers/adodb-mssqlnative.inc.php | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/adodb-mssqlnative.inc.php b/drivers/adodb-mssqlnative.inc.php index 5d225653..43a8564c 100644 --- a/drivers/adodb-mssqlnative.inc.php +++ b/drivers/adodb-mssqlnative.inc.php @@ -63,6 +63,22 @@ class ADODB_mssqlnative extends ADOConnection { var $length = 'len'; var $hasAffectedRows = true; var $poorAffectedRows = false; + + /** + * Holds the affected rows if triggered by close + * + * @var bool|int + */ + public $affectedRowCount = false; + + /** + * Flag that indicates if an affected_rows value + * is required + * + * @var bool + */ + public bool $needsAffectedRowCount = false; + var $metaDatabasesSQL = "select name from sys.sysdatabases where name <> 'master'"; var $metaColumnsSQL = @@ -171,8 +187,11 @@ class ADODB_mssqlnative extends ADOConnection { function _affectedrows() { + if ($this->_queryID && is_resource($this->_queryID)) { return sqlsrv_rows_affected($this->_queryID); + } else if ($this->affectedRowCount !== false) { + return $this->affectedRowCount; } return false; } @@ -667,6 +686,9 @@ class ADODB_mssqlnative extends ADOConnection { $sql = $sql[1]; } + $this->affectedRowCount = false; + $this->needsAffectedRowCount = false; + // Handle native driver flaw for retrieving the last insert ID if ($this->hasInsertID) { // Check if it's an INSERT statement @@ -683,6 +705,10 @@ class ADODB_mssqlnative extends ADOConnection { $retrieveLastInsertID = false; } + if ($sql && preg_match('/^\W*(update|delete)/i',$sql)){ + $this->needsAffectedRowCount = true; + } + if ($inputarr) { // Ensure that the input array is indexed numerically, as required // by sqlsrv_query(). If param() was used to create portable binds @@ -1449,6 +1475,12 @@ class ADORecordset_mssqlnative extends ADORecordSet { */ $this->connection->errorMsg(); if(is_resource($this->_queryID)) { + if ($this->connection->needsAffectedRowCount) { + $this->connection->affectedRowCount = sqlsrv_rows_affected($this->_queryID); + } else { + $this->connection->affectedRowCount = false; + } + $rez = sqlsrv_free_stmt($this->_queryID); $this->_queryID = false; return $rez; |
