在adodb中获取受影响的行

lsmepo6l  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(433)

我使用adodb创建到数据库的连接。我更新了数据库中的数据,没有错误。问题是我无法通过 Affected_Rows() . 我尝试了非常简单的代码,但它不工作。这是我的密码:

  1. $sql = "UPDATE User SET Name=N'MyName' WHERE Id=1";
  2. $conn = new COM ("ADODB.Connection") or die("Cannot start ADO");
  3. $cs = "provider=sqloledb;"."server=localhost;database=Test;uid=Admin;pwd=123456;Max Pool Size=100";
  4. $conn->open($cs);
  5. //there is no error in connecting process. I can add, update, delete normally.
  6. if($conn->Execute($sql) === false)
  7. {
  8. trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->ErrorMsg(), E_USER_ERROR);
  9. }
  10. else
  11. {
  12. echo $conn->Affected_Rows(); //<-- Error in here
  13. }

我在这里读过这个函数。我上面的代码与这里的示例几乎相同。在adodbphp中有没有其他方法可以获得受影响的行数?

n3ipq98p

n3ipq98p1#

在许多情况下,作为执行方法的参数的受影响行并不能像您所希望的那样工作。
您应该尝试捕获ado事件,尤其是executecomplete事件
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/executecomplete-event-ado?view=sql-server-ver15

w3nuxt5m

w3nuxt5m2#

就为了马克。
您的代码:

  1. echo $conn->Affected_Rows()

是adodb sdk方法:http://adodb.org/dokuwiki/doku.php?id=v5:reference:connection:受影响的行
不是本机com(“adodb.connection”)方法。
但我也有同样的问题,因为这个方法返回“variant object”,所以我无法得到值。
我通过编辑sdk源文件adodb5/drivers/adodb-ado5.inc.php#44行修复了这个问题:

  1. $this->_affectedRows =new VARIANT;

收件人:

  1. $this->_affectedRows = null;

然后,方法可以为我返回一个实数。

展开查看全部
mm9b1k5b

mm9b1k5b3#

关于 Affected_Rows() ,我不知道为什么它不起作用。在执行查询之后,还有另一种非常简单的方法来获取受影响的行数。

  1. $conn->Execute($sql,$affected_rows);
  2. echo $affected_rows;
  3. ``` `$affected_rows` 从execute函数返回的值将等于该查询受影响的行数。

相关问题