如何在单个 PHP 文件中同时实现 MySQL 数据的插入与定时清理

如何在单个 PHP 文件中同时实现 MySQL 数据的插入与定时清理

本文介绍如何在同一个 php 文件中安全、高效地完成数据插入与过期记录删除操作,重点解决 android 应用调用时“删除不生效”的常见问题,并强调 sql 注入防护与执行顺序优化。

本文介绍如何在同一个 php 文件中安全、高效地完成数据插入与过期记录删除操作,重点解决 android 应用调用时“删除不生效”的常见问题,并强调 sql 注入防护与执行顺序优化。

在实际移动应用开发(如 Android + PHP + MySQL 架构)中,常需在提交新数据的同时自动清理历史冗余记录(例如:仅保留最近 24 小时的洗衣设备使用记录)。原始方案试图通过 $_GET 触发删除、$_POST 处理插入,导致逻辑分离且 Android 客户端未主动发起 GET 请求,因此删除语句从未执行——这是根本原因。

正确的做法是:将删除操作作为插入前的预处理步骤,统一由同一 HTTP POST 请求触发。这样既保证逻辑原子性,又避免客户端额外请求开销。

以下是优化后的完整 PHP 示例(含关键改进说明):

<?php
include 'DatabaseConfig.php';

// 建立数据库连接
$con = mysqli_connect($HostName, $HostUser, $HostPass, $DatabaseName);
if (!$con) {
    die('Connection failed: ' . mysqli_connect_error());
}

// 仅响应 POST 请求(防止误触发)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // ✅ 步骤1:先删除过期数据(ltime < NOW())
    $cleanupQuery = "DELETE FROM laundry WHERE ltime < NOW()";
    if (!mysqli_query($con, $cleanupQuery)) {
        echo 'Cleanup failed: ' . mysqli_error($con);
        mysqli_close($con);
        exit;
    }

    // ✅ 步骤2:安全插入新数据(使用预处理语句防注入!)
    if (isset($_POST['lmachine'], $_POST['lroom'], $_POST['ltime'])) {
        $stmt = mysqli_prepare($con, "INSERT INTO laundry (lmachine, lroom, ltime) VALUES (?, ?, ?)");
        if ($stmt) {
            mysqli_stmt_bind_param($stmt, "ssi", $_POST['lmachine'], $_POST['lroom'], $_POST['ltime']);
            if (mysqli_stmt_execute($stmt)) {
                echo 'Data inserted successfully';
            } else {
                echo 'Insert failed: ' . mysqli_error($con);
            }
            mysqli_stmt_close($stmt);
        } else {
            echo 'Prepare failed: ' . mysqli_error($con);
        }
    } else {
        echo 'Missing required fields';
    }
} else {
    echo 'Method not allowed. Use POST.';
}

mysqli_close($con);
?>

关键改进点说明:

  • 执行时机统一:删除与插入均在 $_POST 条件下执行,确保每次新增数据时自动清理旧记录;
  • 安全性升级:弃用拼接 SQL(易受 SQL 注入攻击),改用 mysqli_prepare() + bind_param() 预处理语句;
  • 错误反馈增强:对每个数据库操作添加 mysqli_error() 检查,便于调试;
  • 连接健壮性:增加 mysqli_connect() 失败判断,避免静默失败;
  • HTTP 方法约束:显式检查 $_SERVER[‘REQUEST_METHOD’],防止非预期请求方式干扰逻辑。

⚠️ 注意事项:

立即学习“PHP免费学习笔记(深入)”;

  • 确保 MySQL 中 ltime 字段为 DATETIME 或 TIMESTAMP 类型,否则 NOW() 比较可能失效;
  • 若需更精细控制(如只删 1 小时前数据),可将 NOW() 替换为 DATE_SUB(NOW(), INTERVAL 1 HOUR);
  • 生产环境建议将清理逻辑移至数据库事件(Event Scheduler)或定时任务(Cron),避免每次插入都触发 DELETE,提升性能。

通过以上重构,PHP 文件即可可靠、安全地承担“插入+自动清理”双重职责,适配 Android 客户端单次 POST 调用场景。

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xinjizixun/127077.html

三款藏得极深新机,明年换机别只盯着热门旗舰
上一篇 2026-07-19 21:56
下一篇 2026-07-19 22:00

相关推荐