Update返回true但不更新db

时间:2012-10-02 20:05:34

标签: php mysql sql mysqli

我有一个更新函数,用于更新表中的特定行。 sql查询在PHPmyadmin中工作,我总是在函数上返回true。但是,数据库未更新。我查看了代码,没有出现任何错误。可能是什么问题呢。 primary_id是表格的主要ID,唯一的其他列是fund_max

function change_fund_max ($mysqli, $project_id, $fund_max) {

if ($stmt = $mysqli->prepare("UPDATE `project_fund_max` SET `fund_max` = ? WHERE 
    `project_id` = ?")){
    $stmt->bind_param('ii', $project_id, $fund_max);
    $return = $stmt->execute();
    $stmt->close();
    return $return;
} else {return false;}      

}

以下是该功能的使用。

$fund_max = 11.55;
$project_id = 1;
$row43 =  change_fund_max ($mysqli, $project_id, $fund_max);
var_dump($row43);

3 个答案:

答案 0 :(得分:3)

执行只会在失败上返回false ...就像你弄乱了SQL之类的东西。您真正想知道的是命令实际更新了行...检查mysqli_stmt_affected_rows以查看更改的行数是否超过零。

您的project_idfund_max参数在您的bind中也是错误的方式;)

结果:

function change_fund_max ($mysqli, $project_id, $fund_max) {
  if ($stmt = $mysqli->prepare("UPDATE `project_fund_max` SET `fund_max`=? WHERE 
     `project_id` = ?")){
     $stmt->bind_param('di', $fund_max, $project_id);
     if (!$stmt->execute()) return false;
     $count=$stmt->affected_rows;
     $stmt->close();
     return ($count>0);
  } else {
     return false;
  }
}

更新:对于偷偷摸摸的“fund_max是小数”评论...如果fund_max是小数,则需要绑定到双精度,否则你在{期间'小数位的任何位置都会丢失{1}}命令(我的代码已更新)

答案 1 :(得分:1)

一个疯狂的猜测,但似乎数据库中不存在$project_id中传递的值。

这将使UPDATE命令运行,而不是失败,但也不会更新任何记录。

答案 2 :(得分:1)

另一个猜测,project_id和/或fund_max可能不是两个整数。您可以查看manual

此外,列的名称不应该用引号(`)包围,除非它在更新查询中出现在名称本身中。

修改

function change_fund_max ($mysqli, $project_id, $fund_max) {

if ($stmt = $mysqli->prepare("UPDATE project_fund_max SET fund_max = ? WHERE 
 project_id = ?")){
 $stmt->bind_param('di', $fund_max, $project_id);
 $return = $stmt->execute();
 $stmt->close();
 return $return;
}  else {return false;}      

}