在使用预准备语句删除之前检查是否存在值

时间:2014-10-07 20:43:08

标签: 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 \"" . $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行受影响

如您所见,它不存在,但仍然会返回“Successfully”。如何更改此显示:

  

错误:数据库中不存在电影

1 个答案:

答案 0 :(得分:2)

以下内容如何:

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

1) Delete
    - If 0 rows affected or error, Show error message
    - Else show success

我认为第二条路径的变体可以使代码更清晰。