PHP/MYSQL remove row by id


PHP/MYSQL remove row by id

我有一个表单,要求用户输入他们想要从DB中的考试表中删除的考试id。

我遇到的问题是,即使用户输入的id在DB中不匹配,脚本也会触发else块,完全忽略该条件。

我可能已经实现了这个错误,但据我所知,我看不到我错在哪里,但我怀疑我在我的if语句中做错了什么。

这是我的表单,需要用户输入一个考试id来删除

<form method = "post" action = "examDeleted.php">
    <h1 class = "title">Delete Exam</h1>
    <div class = "formContent">
        <labeL for = "id">ID</labeL>
        <input type = text name = "id" class = "input">
        <br><br>
        <br><br><br>
        <input type = "submit" value = "Delete">
    </div>
</form>`

传递给包含从表

中删除记录的sql查询的函数。
<?php
include('dbLogin.php');
$id = trim($_POST['id']);
if($id != "")
{
    $delete = "DELETE FROM exams WHERE id = '$id'";
    $results = mysql_query($delete);
    if(!$results)
    {
        die ("Cannot delete data from the database! " + mysql_error());
        echo '<br><br>';
        echo '<a href="home.html">Return</a>';
    }
    else
    {
        echo"Exam: $id has been deleted";
    }
}
else
{
    echo "No data entered! " . mysql_error();
}
?>

正如您可以看到的条件!$results,对我来说,它表示如果记录不存在,则终止查询,否则确认删除。是否有一个明显的原因,为什么内部if语句不被解雇?

DELETE语句被认为是成功的,即使没有删除任何行。(这就是SQL的工作原理;(不是mysql特有的)

我想说你应该使用mysql_affected_rows来找出有多少行被删除了,但是正如其他人指出的那样,你根本不应该使用mysql_函数。

你的代码很容易受到SQL注入攻击。如果有人要将以下ID POST到examDeleted.php(记住,他们不必使用您的表单来这样做,因此可以绕过任何客户端检查):

' OR 1 = 1 OR id = ' 

…我认为它可能会删除每一个考试在你的表,因为你的SQL语句将结束为:

DELETE FROM exams WHERE id = '' OR 1 = 1 OR id = ' '

…这是一个有效的DELETE语句,其WHERE子句匹配您的所有行。

使用参数化查询(在未弃用的MySQL驱动程序中可用,如mysqli或PDO)将解决此问题。