
本文介绍如何在同一个 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