mysqli 删除不起作用


mysqli DELETE not working

我正在尝试在每个$row旁边打印一个DELETE链接。此外,在另一个页面上,有一个"下载"链接 - 它们应该以相同的方式工作。 问题是这样的:我让 DELETE 和 DOWNLOAD 与每条记录一起打印出来,但使用我拥有的代码,什么也没发生,或者我的脚本因错误而幸灾。 出于某种原因,我启动并运行了我网站最复杂的功能,但这仍然让我无法理解。下面是一些代码:

    while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
    {
  echo '<tr><td align="left">' .
    $row['title'] . '</td><td align="left">'
    . $row['genre'] . '</td><td align="left">'
    . $row['length'] . '</td><td align="left">'
    . $row['created'] . '</td><td align="left">'
    . $row['views'] . '</td><td align="left">'
    . "<a href='wprofile.php?id={$row['upload_id']}'>Delete</a></td> . '</td></tr>';
    }

在同一个php页面上,我有这个逻辑让我失望。 该示例用于删除,但对于我的下载链接问题,同样的失败。

    if(isset($_GET['upload_id']))
    {
    $id = intval($_GET['upload_id']);
    require_once (dbconnectionpath);
    $delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";
    $done = @mysqli_query ($dbc, $delquery); //run the query
    if($done) {
    if (mysqli_num_rows($done)==1) {
    echo 'Record deleted';
    }
    else{
    echo 'Delete failed';
    }
    @mysqli_free_result($result);
    }
    else{
    echo "Error! Query failed: <pre>{$dbc->error}</pre>";
    }
    mysqli_close(dbconnection);

我收到的错误是"错误,查询失败">

if(isset($_GET['upload_id']))更改为if(isset($_GET['id']))

$id = intval($_GET['id']);

HTML 参数是 id,而不是 upload_id

在您的链接中,您似乎正在设置id

<a href='wprofile.php?id={$row['upload_id']} ...

但是您的代码引用$_GET['upload_id'].换句话说,您在代码中引用了错误的名称。在代码中使用id,或在链接中使用upload_id

另一件事,这可能只是因为我看不到所有的 HTML - 你似乎在代码中有很多</td>元素。检查链接行末尾的那个,但如前所述,这可能会关闭未显示的早期<td>


如果,如您在评论中提到的,您的"查看源代码"将链接显示为:

<a href='newwriter_profile.php?id='>Delete</a></td>

那么你创建那个HTML链接有问题。

那里有很多事情可能会出错,首先想到的几个是您的原始查询中没有update_id,或者您正在查看的行的 ID 确实为空。

在生成 HTML 链接行之前检查 $row['update_id'] 的值,这至少应该确认或否认该假设。除此之外,您必须找出为什么您的链接不正确。


我刚刚注意到的一件事,你可能想研究一下,是你对引号的使用:

$delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";

现在我知道 MySQL 有时使用反引号来保护表和列名称免受不正确的解析(例如使用 select `column with spaces` from tbl1 ...(,但您的代码似乎有单引号而不是反引号。

这只是另一件事要检查。查询中的 where 子句可能是将文本字符串"upload_id"与变量进行比较,而不是比较upload_id列。

这可以解释为什么您的delete没有命中任何行,因为您的 ID (可能(是一个自动递增的整数字段,这意味着它永远不会等于非数字字符串文字。

尝试删除大括号,因为当您打印出创建的查询时,它会显示带有大括号的 id 值,这可能会导致不删除 id。

这应该有效:"从上传中删除,其中upload_id = $id";

要防止页面定向到另一个页面,请使用 Preventdefault JS 函数。