【问题标题】:mysql_affected_rows() returns -1mysql_affected_rows() 返回 -1
【发布时间】:2011-07-17 08:55:09
【问题描述】:

执行 SQL 语句时,如 插入table ...在重复密钥更新... 我依靠 mysql_affected_rows() 来确定是否执行了插入或更新。 作为http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html 上的mysql 站点,它声明:

对于 INSERT ... ON DUPLICATE KEY UPDATE 语句,如果将行作为新行插入,则受影响的行值为 1,如果更新现有行,则值为 2。

在我们升级到 MySQL 5.1.16 之前一切正常,当时许多查询现在都有 mysql_affected_rows() 返回 MINUS ONE (-1)

http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html 上的 MySQL 站点上建议的解决方案是在每次对 select 查询执行函数 mysql_query() 后调用函数 mysql_store_result()。

但是,PHP 似乎没有定义这样的函数。

如何使用 PHP 和 MySQL 5.1.16 让 mysql_affected_rows() 正常工作?

【问题讨论】:

  • 你在使用准备好的语句吗?顺便说一句,PHP 有 store_result 函数 - php.net/manual/en/mysqli.store-result.php,但 store_result 在 SELECT 之后调用,而不是在 INSERT 之后。 -1 表示查询返回错误,或者对于 SELECT 查询,mysql_affected_rows() 在调用 mysql_store_result() 之前被调用
  • 我也有这个问题...

标签: php mysql rows-affected


【解决方案1】:

一般来说,如果mysql_affected_rows() 返回-1,则表示查询失败(有关更多信息,请参阅manual page)。您可以通过调用mysql_error() 来检查错误是什么,但在您知道有多少行受到影响之前,您应该已经在调用mysql_query() 时发现了错误。

既然你问的是store_result 函数,我也回答你的那部分问题:

PHP 的MySQL 模块可能没有store_result 函数,但较新的MySQLi 模块有。见http://php.net/manual/en/mysqli.store-result.php

无论如何,通常建议从使用mysql_xxx 函数切换到等效的mysqli_xxx 函数,因此这将是您这样做的绝佳机会。

您不需要为此升级您的 PHP 版本,因为 MySQLi 模块是随 PHP 5.0 引入的。不过,我还是建议您考虑升级——如果您使用的是 PHP 5.1,那么您使用的版本已经失去支持超过五年了。

【讨论】:

    【解决方案2】:

    mysql_affected_rows 如果最后一个查询失败,则返回 -1。我会检查您的查询和/或数据库连接。见this link

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2011-02-19
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2015-03-04
      • 2013-10-27
      • 2016-07-28
      相关资源
      最近更新 更多