我有一个更新函数,用于更新表中的特定行。 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);
答案 0 :(得分:3)
执行只会在失败上返回false
...就像你弄乱了SQL之类的东西。您真正想知道的是命令实际更新了行...检查mysqli_stmt_affected_rows
以查看更改的行数是否超过零。
您的project_id
和fund_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;}
}