即使没有更新行,mysql_affected_rows()也始终返回1

时间:2010-05-15 14:09:22

标签: mysql count row

我要做的是:(以编程方式)

更新状态,其中id是什么,如果没有更新的行,则给出错误:我们找不到具有id的记录,否则给消息成功。

这里我使用mysql_affected_rows()来了解行是否已更新,但它总是返回1,因此即使没有更新行,用户也会收到成功消息。

谁能告诉我它会是什么?

以下是代码:

   function update_sql($sql) {


  $this->last_query = $sql;

  $r = mysql_query($sql);

  if (!$r) {
     $this->last_error = mysql_error();         
     return false;
  }      
  $rows = mysql_affected_rows();
  if ($rows == 0) return true;  // no rows were updated
  else return $rows;  }

此代码返回1.

2 个答案:

答案 0 :(得分:4)

这是因为如果您使用trueecho将打印为“1”。对于调试尝试使用var_dump(),或让你的函数返回0(在我看来,这是更好的选择)。

一个小小的说明;我认为您应该尝试使您的代码更具可读性(如果您的问题中的代码与您文件中的代码具有相同的布局)。尝试缩进代码块,使用单独的行来关闭大括号等等......

答案 1 :(得分:2)

这只是猜测...

也许你的功能可以作为例外工作?也许这段代码if ($rows == 0) return true;工作正常,并返回true,但您将该值视为整数(布尔值true可以显示为1)?执行:var_dump(uddated_sql('YOUR QUERY'))并检查它是返回布尔值true还是整数1值。