大佬教程收集整理的这篇文章主要介绍了过期时更新状态,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做一个小型租赁系统,我的 sql 数据库将记录客户租用产品的详细信息和过期日期。如果日期超过逾期日期,“状态”将自动从“当前正在出租”设置为“逾期”。截至目前,这是我能想到的,但当然,我的代码逻辑是错误的。为了更清晰的观察,请参见附图。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "assignment3";
// Create connection
$conn = new MysqLi($servername,$username,$password,$dbName);
// check connection
if ($conn->connect_error)
{
dIE("Connection Failed: " . $conn->connect_error);
}
$retrIEve = MysqLi_query($conn,"SELECT * FROM rentproducts WHERE status = 'Currently RenTing'");
$row = MysqLi_fetch_array($retrIEvE);
$today = new datetiR_7_11845@e(date("d-m-Y"));
$overduedate = new datetiR_7_11845@e($row['overduedate']);
$overduedays = $overduedate->diff($today)->format("%a");
echo $overduedays;
if ($overduedays >= 1)
{
$sql = "updatE rentproducts SET status = 'Overdue' WHERE status = 'Currently RenTing'";
MysqLi_query($conn,$sql);
}
?>
你的逻辑确实是错误的。无论日期如何,您的 updatE
查询都会将所有记录从“当前正在出租”更改为“过期”。
如果您想在日期大于另一个日期(例如昨天)时在 SQL 中设置一个值,那么您可以使用 SQL 日期函数。使用 NOW()
将为您提供 datetiR_7_11845@e 格式的日期(即 Y-m-d H:i:s)或 CURDATE()
将为您提供日期格式的日期(即 Y-m-d 00:00:00)。然后你可以增加或减少一个间隔。
@H_930_7@mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_StriCT); $mysqli = new mysqli('localhost','user','password','test'); $mysqli->set_charset('utf8mb4'); // always set the charset $stmt = $mysqli->prepare("updatE rentproducts SET status = 'Overdue' WHERE status = 'Currently RenTing' AND overduedate >= CURDATE() - INTERVAL 1 DAY"); $stmt->execute();
您甚至可以在 MySQL 中设置一个事件来每天执行此查询。
然而,这不是一个好的数据库设计。您正在存储非规范化数据。虽然有时它可能有意义,但我认为在这种情况下,您应该保留列 status
原样,或者甚至完全删除它,因为它不提供额外信息。让您的应用程序在从数据库读取数据时处理状态。
例如:
$stmt = $mysqli->prepare("SELECT *
FROM rentproducts
WHERE status = 'Currently RenTing'
AND overduedate >= CURDATE() - INTERVAL 1 DAY");
$stmt->execute();
$overdueRentals = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
以上是大佬教程为你收集整理的过期时更新状态全部内容,希望文章能够帮你解决过期时更新状态所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。