【发布时间】:2014-10-07 20:43:07
【问题描述】:
我想在电影不存在时收到通知。这表示从数据库中删除电影的脚本。 这是我现在拥有的一部分:
$title = $_POST["title"];
$delMovie = mysqli_prepare($link, "DELETE FROM movie WHERE title=?");
mysqli_stmt_bind_param($delMovie, "s", $title);
if (mysqli_stmt_execute($delMovie)) {
echo("Movie \"" . $title . "\" successfully deleted: ");
echo(mysqli_stmt_affected_rows($delMovie) . " rows affected");
} else {
echo("Error (" . mysqli_stmt_errno($delMovie) . "): ");
echo(mysqli_stmt_error($delMovie));
}
mysqli_stmt_free_result($delMovie);
mysqli_stmt_close($delMovie);
mysqli_close($link);
当电影不存在时,它仍然返回:
电影“Movie1”已成功删除:0 行受影响
如您所见,它不存在,但仍返回“成功”。如何更改它以显示:
错误:数据库中不存在电影
【问题讨论】:
-
它返回成功,因为查询没有因错误而失败。没有任何行受到影响。
-
为什么不将
mysqli_stmt_affected_rows($delMovie)存储在变量中,如果 == 0 则回显不同的消息。只运行删除查询并且没有删除任何行并没有什么坏处。然后你只运行一个查询,无论如何它会更快。 -
“拍摄,看看你是否击中任何东西”的删除方法比“测试和有条件删除”方法要好得多,因为后者会受到丑陋的race conditions 的影响,您的测试可能会失败,但该记录稍后会出现。
标签: php mysql database mysqli prepared-statement