0

我有一个更新函数,可以更新表中的特定行。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);
4

3 回答 3

3

Execute 只会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 是小数,则需要绑定到双精度,否则在命令期间您将丢失小数位的任何内容bind_param(我的代码已更新)

于 2012-10-02T20:12:03.350 回答
1

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

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

于 2012-10-02T20:08:19.797 回答
1

另一个猜测,project_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('di', $fund_max, $project_id);
 $return = $stmt->execute();
 $stmt->close();
 return $return;
}  else {return false;}      

}
于 2012-10-02T20:12:58.060 回答