2010-05-15 90 views
5

我所试图做的是:(编程)mysql_affected_rows()函数始终返回1,即使没有行已更新

更新状态其中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.

+0

您能向我们展示一下这段代码吗? – 2010-05-15 14:10:39

回答

4

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

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

+0

+1由于缺乏问题信息,受过良好教育的猜测。 – 2010-05-15 14:23:27

+0

感谢您的建议,我会试一试。 该代码在我的编辑器中看起来是正确的,但是当我将它粘贴在此处时,它已经变得很紧密了。 – happyhardik 2010-05-15 14:27:34

+0

好的,在这种情况下,您会忽略我的小注释:) – 2010-05-15 14:27:59

2

这只是一个猜测...

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

相关问题