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