【问题标题】:issue while deleting row in database by php通过php删除数据库中的行时出现问题
【发布时间】:2021-06-02 22:48:57
【问题描述】:

您好,我的数据库中有一个名为 files 的表,我想通过其 id 删除一行,但是每当我运行代码时,我都会收到响应“已成功删除”,但它不会删除该行。 这是我的代码。 我将不胜感激。

<?php

require "conn.php";

$id = $_POST["id"];

if($conn){

$sql = "SELECT * FROM files WHERE id LIKE '$id'";
$query = mysqli_query($conn,$sql);
if (mysqli_num_rows($query)>0) {
    $sqlDelete = "DELETE FROM files WHERE id LIKE '$id'";
    echo "Successfully Deleted";
} else {
    echo "Failed to delete";
}

} else {
    echo "Connection Error";
}

?>

我猜这个问题是因为数据库中的 id 是 Int 但我将字符串传递给它所以我应该如何解决这个问题?

【问题讨论】:

  • 您还没有执行删除查询...您只定义了没有查询调用的查询字符串。请注意,您应该考虑使用准备好的语句
  • 另请注意,最好使用直接比较 (=) 而不是使用LIKE,因为您正在寻找完全匹配。在这种情况下,它们的行为相同,但直接比较更快。

标签: php database delete-row


【解决方案1】:

分配后

$sqlDelete = "DELETE FROM files WHERE id LIKE '$id'";  

你需要

if (mysqli_query($conn, $sqlDelete))
{
 echo "Successfully Deleted";
}

为了执行删除查询。顺便说一句,select 语句是多余的。

请注意,您的代码非常不安全且易于使用 SQLi。使用准备好的语句而不是文本替换。

【讨论】:

    【解决方案2】:

    试试这个

     $sqlDelete = "DELETE FROM files WHERE id = ".$id;
     mysqli_query($conn,$sqlDelete );
    

    【讨论】:

    • 一个好的答案包括对更改内容的解释,以便 OP 和任何未来的读者可以轻松了解错误所在并学习一些东西。
    • 警告!就像 OP 的原始代码一样,这对SQL injection 攻击是开放的。 从不像这样向查询中添加参数。改为使用带有绑定参数的准备好的语句。
    • 马格纳斯谢谢。因为我是 php 新手,所以我对此一无所知,这个链接对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多