mysql_affected_rows()返回-1

时间:2011-07-17 08:55:09

标签: php mysql rows-affected

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

  

对于INSERT ... ON DUPLICATE KEY UPDATE语句,如果将行作为新行插入,则affected-rows值为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站点上建议的解决方案是在每次执行选择查询的函数mysql_query()之后调用函数mysql_store_result()。

但是,PHP似乎没有定义这样的功能。

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

2 个答案:

答案 0 :(得分:4)

通常,如果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版本,因为PHP 5.0引入了MySQLi模块。不过我建议考虑进行升级 - 如果您使用的是PHP 5.1,那么您使用的版本已经超过五年了。

答案 1 :(得分:2)

如果上次查询失败,则

mysql_affected_rows返回-1。我会检查您的查询和/或数据库连接。请参阅this link