6

执行 SQL 语句时,例如 INSERT INTO table... ON 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 语句,如果将行作为新行插入,则受影响的行值为 1,如果更新现有行,则值为 2。

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

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

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

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

4

2 回答 2

4

通常,如果mysql_affected_rows()返回 -1,则表示查询失败(有关详细信息,请参阅手册页)。您可以通过调用来检查错误是什么,但是在您找到受影响的行之前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,那么您使用的版本已经失去支持超过五年了。

于 2011-07-17T09:00:13.043 回答
2

mysql_affected_rows如果最后一个查询失败,则返回 -1。我会检查您的查询和/或数据库连接。请参阅此链接

于 2011-07-17T08:58:52.903 回答