Php 在使用准备好的语句删除之前检查值是否存在
我想在电影不存在时得到通知。这表示从数据库中删除电影的脚本。 这是我现在拥有的一部分:Php 在使用准备好的语句删除之前检查值是否存在,php,mysql,database,mysqli,prepared-statement,Php,Mysql,Database,Mysqli,Prepared Statement,我想在电影不存在时得到通知。这表示从数据库中删除电影的脚本。 这是我现在拥有的一部分: $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 \"" . $t
$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行受影响
如您所见,它不存在,但仍然返回“成功”。如何更改此项以显示:
错误:数据库中不存在电影
那么以下内容如何:
if (mysqli_stmt_affected_rows($delMovie) == 0) then
echo "Error: Movie does not exists in database";
仅仅因为mysql返回0,并不意味着您必须将结果显示为多个
=============================================
你是唯一的选择
1) Do a select statement to check for existence
2) If not exists
a) Show error
b) Delete
- If error deleting, show error
- Else show success
或
我认为第二条路径上的一个变体可以使代码更清晰。它成功返回,因为查询没有失败并出现错误。没有受影响的行。为什么不将受影响的行($delMovie)存储在变量中,如果==0,则回显不同的消息。运行delete查询并且不删除任何行并没有什么坏处。然后,您只运行一个查询,无论如何都会更快。删除的“射击并查看是否命中任何内容”方法比“测试并有条件地删除”方法要好得多,因为后者可能会导致测试失败,但记录会在稍后出现。
1) Delete
- If 0 rows affected or error, Show error message
- Else show success