mysqli DELETE无法正常工作

时间:2012-05-11 01:01:00

标签: php mysqli sql-delete rowid

我正在尝试在DELETE旁边打印$row个链接。此外,在另一个页面上,有一个“下载”链接 - 它们应该以相同的方式工作。问题是:我得到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页面上我有这个逻辑让我失望。该示例用于删除,但我的DOWNLOAD链接问题也是如此。

    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);

我得到的错误是“错误,查询失败”

3 个答案:

答案 0 :(得分:0)

在您的链接中,您似乎正在设置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(可能)是一个自动递增的整数字段,这意味着它永远不会等于非数字字符串文字。

答案 1 :(得分:0)

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

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

HTML参数是id,而不是upload_id

答案 2 :(得分:0)

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

这应该有效:“DELETE FROM upload WHERE upload_id = $ id”;

防止页面指向另一个页面使用preventdefault js函数。