logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

PHP课程 - 第3.4课 - 使用 MySQL 数据库。DELETE 删除查询。

09/10/2025, by Ivan

在上一课中,我们学习了如何向我们的管理类 simpleCMS 添加新方法,现在让我们再添加一个用于删除记录的方法 delete()

我们像往常一样添加方法:

public function delete($mid){
    
}  

正如你所见,我们传递了一个参数 $mid —— 即记录的 ID。回想上一课,我们决定使用另一种方式传递参数,即直接通过 GET 请求,而这次我们将尝试用另一种方式传参。

方法已定义好,现在在 index.php 文件中编写路径处理:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // 如果变量等于 add,则显示添加表单
		break;
		case 'update':
		  print $obj->display_update();  // 如果变量等于 update,则显示修改表单
		break;
		case 'delete':
		  if($_GET['mid']){ // 如果变量等于 delete,则检查 mid 是否存在
		    $obj->delete($_GET['mid']); // 调用删除消息方法
			print $obj->display_public(); // 删除后重新显示消息
		  }else{
		    print '<p>未选择 mid!</p>';
		    print $obj->display_public(); // 显示消息列表			
		  }
		break;
		default:
		  print $obj->display_public(); // 如果变量不存在,则显示消息
	  }

为了使删除功能正常工作,URL 必须如下所示:

http://test/index.php?admin=delete&mid=7

在这种情况下,将删除 mid=7 的消息。现在来实现我们的 delete() 方法:

  public function delete($mid){
    mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error());
  }  

我们来分析一下 MySQL DELETE 删除语句的结构。首先是关键字 DELETE,接着是操作符 FROM。在 FROM 后指定要删除记录的表名(注意! 如果不指定删除条件,将删除表中的所有记录!)。然后写出删除条件。在这里我们根据传入的参数 $mid 来删除对应的记录。最后我们加上查询执行的错误检查。

正如之前提到的,当 URL 中包含两个参数 admin=delete&mid=7 时,我们的方法就会被调用。为了方便,我们在每条消息下方添加链接,在 display_public() 方法中修改如下:

  public function display_public() { // 输出消息方法
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // 查询语句
	$result = mysql_query($sql) or die(mysql_error());  // 将查询结果保存到变量中
	while($row = mysql_fetch_array($result)){ // 使用 mysql_fetch_array() 处理结果集
	  $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // 包裹每条记录的 div
	  $content .= '<span class="time">#' . $row['mid'] . ' 于 ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; 	// 输出时间和标题
	  $content .= '<p>' . $row['bodytext'] . '</p>'; // 输出消息文本
	  $content .= '<p>';
	  $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">编辑消息</a>'; // 编辑链接
	  $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">删除消息</a>'; // 删除链接
	  $content .= '</p>';
	  $content .= '</div>'; // 结束 div
	}
	$content .= '<p><a href="/index.php?admin=add">添加新消息</a></p>';
    return $content;
  }

现在,当点击“删除消息”链接时,该消息就会如预期被删除。这样就可以直接在网站上快速删除不需要的消息,而无需进入 PhpMyAdmin。

最后,我们只需为“编辑”和“删除”链接之间添加一点间距:

.post a{
  padding-right: 5px;
}

好了,本课就到这里。在下一课中,我们将学习另一个非常重要的操作符 —— JOIN,用于从多张表中进行查询。