summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Newnham <mark@newnhams.com>2026-03-11 03:40:29 -0600
committerGitHub <noreply@github.com>2026-03-11 10:40:29 +0100
commitb3049bb9e3e897e97b61fe52449e9fa31b36e1c4 (patch)
tree3078ca487cc48a33d862162fe3d61846cea8185d
parentffda4226b953a94a785ca3110d4bfceaf0bb95c1 (diff)
downloadadodb-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.php32
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;