【问题标题】:Delete the row with the highest id in mysql, using php使用php删除mysql中id最高的行
【发布时间】:2016-10-13 13:00:32
【问题描述】:

我正在开发一个非常简单的迷你聊天程序 (php/mysql),它会显示最后 10 条消息。

我想添加一个按钮来删除最后一条消息(使用表单,导致php 文件,如下所示)。

我真的是 phpmysql 的初学者,所以我不明白为什么它不起作用。

按照我的代码:

<?php 
    // Create connection
    $cn = new mysqli("localhost","root","","test");

    // Check connection
    if($cn->connect_error)
    {
        echo "Connection failed : " . $cn->connect_error;
    }

    $sql = "DELETE FROM `minichat` WHERE `minichat`.`id` = ('SELECT MAX(`id`) FROM `minichat`')";

    if($cn->query($sql) === TRUE){
            echo "Deleted succesfully";
    }
    else
    {
        echo "Error deleting record: " . $cn->error;
    }

    //header('Location: connexion.php');
?>

【问题讨论】:

  • 什么不起作用?
  • 向我们展示错误,或者解释什么不起作用
  • 它不会删除行,也不会发送任何错误代码,而是显示“已成功删除”
  • 检查错误日志。
  • 是否允许删除权限?看到给出的答案并没有解决它,它应该有

标签: php mysql database sql-delete


【解决方案1】:

根据DELETE Syntax上的手册:

子查询

您不能从表中删除并从同一表中选择 子查询。

所以你应该这样做:

DELETE FROM minichat ORDER BY id DESC LIMIT 1

您可能需要一个条件来确保用户只能删除他/她自己的评论。

【讨论】:

  • 啊,这很有道理。
  • 鉴于已授予 DELETE 权限并且他们想要使用的“所说按钮”实际上有效 ;-) 根据我在问题下的 cmets。
  • @Fred-ii- 我只是假设它确实如此;-)
  • 我很好奇为什么他们的查询返回 TRUE,什么时候应该返回 FALSE,因为他们正在检查错误。如果未授予 DELETE 权限,MySQL 会静默失败吗?我当然想在这里大声思考。和/或只是他们未知的按钮失败了?错误报告可能没有使用?我很困惑。编辑:哦,所以他们说它确实有效。好吧时髦的小时!
  • 谢谢!以前的语法是我自己编的,不知道这些规范。它现在可以工作了,我更了解它的工作原理!
【解决方案2】:

您应该删除子选择周围的单引号

 "DELETE FROM `minichat` WHERE `minichat`.`id` = (SELECT MAX(`id`) FROM `minichat`)"

否则你有 WHERE minichat.id = 'mi string text'

事实上你可以从子查询中删除,你可以试试

 DELETE 
FROM `minichat` 
WHERE `minichat`.`id` = (select t.id from (SELECT MAX(`id`) FROM `minichat`) t)

这预计会超过子查询删除的限制

【讨论】:

  • 不错,没看到。
  • 这不起作用,它给出相同的结果“已成功删除”,但实际上并没有删除该行。
【解决方案3】:

您可以尝试设置一个变量来收集您想要的 ID。然后,您可以将该变量称为要删除的 ID。

【讨论】:

  • 不切实际去数据库询问最大ID,然后发送一个不同的查询删除。
  • 我是否需要为此目的使用准备好的查询?
  • 是的,例如:$x = SELECT MAX(id) FROM minichat)"。如果查询不起作用,请打开您的 sql 编辑器并尝试在其中运行它以供将来参考看看它是否有效
猜你喜欢
  • 2020-10-04
  • 1970-01-01
  • 2013-05-30
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多