sqlsrv UPDATE 语句运行但不更新数据库

Posted

技术标签:

【中文标题】sqlsrv UPDATE 语句运行但不更新数据库【英文标题】:sqlsrv UPDATE statement runs but doesn't update DB 【发布时间】:2014-05-19 14:33:54 【问题描述】:

我有一个问题,我的 php sqlsrv UPDATE 语句运行并且不返回任何错误,但数据库中没有任何变化,并且该行实际上没有更新。是否有什么我遗漏的东西可以让这个查询看起来成功运行但不更新行?

我已检查更新语句是否在 SQL Server Management Studio 中运行并更新了行。

$visitquery = "UPDATE tblVisit SET CalledInBy='WINNER' WHERE VisitID='3679061'";            

                    $visitClose = sqlsrv_prepare($connect,$visitquery);
                    if( sqlsrv_execute( $visitClose))
                        
                              echo "Statement executed.\n <br />";
                        
                        else
                        
                             echo "Error in executing statement.\n";
                             die( print_r( sqlsrv_errors(), true));
                         

【问题讨论】:

你的 where 子句可能没有匹配的行吗?在调用sqlsrv_execute 后尝试sqlsrv_rows_affected($visitClose),看看有多少行受到UPDATE 语句的影响。 知道你有一个记录在哪里VisitID = '3679061'(没有错别字,没有不匹配的数据类型?) 另外,将 db 和 schema 名称添加到语句中的对象中,例如 MAIN.dbo.tblvisit 等。 @JonathanAmend 1 行受影响,但数据库中仍然没有更新 有没有机会你在某个地方打电话给sqlsrv_begin_transaction却忘了打电话给sqlsrv_commit 【参考方案1】:

感谢@JonathanAmend

sqlsrv_begin_transaction 已打开,但未调用 sqlsrv_commit

http://www.php.net/manual/en/function.sqlsrv-commit.php

【讨论】:

【参考方案2】:

确保您的脚本有权访问正确的数据库,否则表不会发生任何事情。

首先,建立与数据库的连接,然后指定包含您的表的数据库。

在您的设置中,将此行添加到您的代码上方。

$connect = sqlsrv_connect(server format goes here,array("Database"=>name of database containing tblVisit in quotes goes here,"UID"=>username to access database goes here,"PWD"=>password to access database goes here));

对于每个值,用引号将它们括起来,因为它们是字符串。

这里有更多关于如何制作代码的信息:

See this (at php.net)

【讨论】:

以上是关于sqlsrv UPDATE 语句运行但不更新数据库的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataAdapter.Update(dataset) 方法插入新行但不更新现有行

oracle 怎么理解update 表 set 字段1 = 值,字段2 = 值 where 字段3 = 值

mysql update语句运行无错误但是没有更新

SQL Server 2008 update语句只能更新1行数据?

MySQL的更新语句update中可以用子查询吗?

oracle 数据库用update 语句更新无效。