执行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()正常工作?
答案 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。