【问题标题】:mysql_affected_rows() always returns 1 even though no row was updatedmysql_affected_rows() 始终返回 1,即使没有更新任何行
【发布时间】:2011-02-19 21:20:27
【问题描述】:

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

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。

【问题讨论】:

  • 您能告诉我们发生这种情况的代码吗?

标签: mysql count row


【解决方案1】:

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

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

【讨论】:

  • +1 考虑到问题中缺乏信息,这是有根据的猜测。
  • 谢谢你的建议,我去试试。代码在我的编辑器中看起来很合适,但是当我将其粘贴到此处时却出现问题..
  • 好吧,那你就忽略我的小笔记吧:)
【解决方案2】:

这只是猜测……

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多