使用mysql_affected_rows是否安全

时间:2012-08-23 09:23:20

标签: php mysql

使用mysql_affected_rows可以在用户进行更新时获取受影响的行数吗?如果有多个用户更新其密码并且我需要知道每个用户是否成功更新,该怎么办?因此,如果3个用户同时进行更新,即使一个用户更新未成功,mysql_affected_rows也可能返回2。那是怎么回事?我不能同时测试多个用户。这有多安全。

5 个答案:

答案 0 :(得分:2)

它是安全的,并返回当前数据库连接的值(mysql-affected-rows function)。

答案 1 :(得分:1)

这很安全。它只返回您自己连接中最后一个查询的数据。

PHP documentation(感谢Fluffeh):

  

通过与 link_identifier 关联的最后一次INSERT,UPDATE,REPLACE或DELETE查询获取受影响的行数。

由于它是MySQL C API的瘦包装,我们还可以check that

  

my_ulonglong mysql_affected_rows(MYSQL * mysql)

就我所见,它没有在任何地方明确说过,但确实需要连接标识符和it seems,一般模式是所有函数都返回有关特定连接的数据:

  

从多个客户端同时使用LAST_INSERT_ID()和AUTO_INCREMENT列完全有效。每个客户端将收到客户端执行的最后一个语句的最后插入的ID。

无论如何,如果您无法确定您获得的结果是否属于您,那么它将无法使用。

答案 2 :(得分:0)

这是安全的,因为它是特定于连接的。

答案 3 :(得分:0)

如果您将连接的引用作为参数传递,则它特定于该连接,因此即使同时有用户访问您的脚本,也可以安全使用 - 因为它们每个都使用单独的连接!请参阅documentation for mysql_affected_rows

但请注意,不推荐使用整个mysql扩展。考虑切换到MySQLi或PDO_MySQL!

答案 4 :(得分:0)

我使用mysql_query("SELECT ROW_COUNT();");。我总觉得它效果更好。