当使用delete查询时,php代码中的结果总是true

ktca8awb  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(237)

我正在开发一个android应用程序,我已经将我的应用程序连接到云服务器。现在我想从服务器的登录数据库users表中删除一个特定的用户。输入来自应用程序。输入是电子邮件id。
我所面临的问题是,即使数据库中的数据不存在,我也总是得到真实的结果。
示例:如果有电子邮件id“example@email.com在数据库中,如果给定的输入是example@email.com,查询结果为true。
如果输入电子邮件是“no@email.com“数据库中不存在,结果总是正确的。。。
下面是我与数据库以及sndroid应用程序通信的php代码。

<?php
    $email = $_GET['email'];

    $servername = "localhost";
    $usernamedb = "root";
    $passworddb = "smartlock";
    $dbname = "login";
    $conn = mysqli_connect($servername,$usernamedb,$passworddb,$dbname);
    $sql = "DELETE   FROM  `users` WHERE (`email`='".$email."')";

    if ($conn->query($sql) === TRUE)  {
        $response = array('message'=>'success');
        echo json_encode($response);
    } 
    else {
        $response = array('message'=>'wrong');
        echo json_encode($response);
    }

    mysqli_close($conn);
?>
weylhg0b

weylhg0b1#

写条件的方式很正常,你总是会得到一个真值,因为它不执行查询,只是检查查询是否可执行。你需要使用 mysql_affected_rows or $mysqli->affected_rows 看看行是否真的受到影响。

1u4esq0p

1u4esq0p2#

$conn->query($sql) 将为true,除非执行查询时出错。如果您想知道有多少行受到影响,您需要使用mysql\u-affected\u-rows函数。
请注意这一行:

$sql = "DELETE   FROM  `users` WHERE (`email`='".$email."')";

允许sql注入攻击。查看准备好的陈述。

ia2d9nvy

ia2d9nvy3#

查询函数返回 假 一旦失败。为了成功 选择、展示、描述 或 解释 查询 mysqli\u查询() 将返回一个 mysqli\u结果 对象。对于其他成功的查询 mysqli\u查询() 会回来的 是的。
你可以用

 $mysqli->affected_rows

查找删除的行数,然后确定是否实际删除了行

相关问题