You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-MySQL DateTime转字符串失败,插入当前时间遇报错求助

问题解决:DateTime对象无法转字符串导致MySQL更新失败

错误原因很直接:你调用$saleend->format('Y-m-d H:i:s')后,没把格式化后的字符串存进变量,反而直接在SQL语句里用了$saleend这个DateTime对象——PHP没法自动把对象转换成字符串,所以触发了这个报错。

修复方案1:保存格式化后的字符串

把日期时间格式化结果存到变量中,再拼入SQL:

$saledays = 7; // 替换成你的实际变量值
$salehours = 2;
$id = 1;

$saleend = new DateTime();
date_add($saleend, date_interval_create_from_date_string("$saledays days, $salehours hours, 00 minutes, 00 seconds"));
// 关键:把格式化后的字符串存起来
$formatted_saleend = $saleend->format('Y-m-d H:i:s');

mysqli_query($conn, "UPDATE tableName SET SALEEND = '$formatted_saleend' WHERE ID = '$id'");

修复方案2:用预处理语句(更安全,推荐)

直接拼变量到SQL有注入风险,用mysqli预处理语句更稳妥:

$saledays = 7;
$salehours = 2;
$id = 1;

$saleend = new DateTime();
date_add($saleend, date_interval_create_from_date_string("$saledays days, $salehours hours, 00 minutes, 00 seconds"));
$formatted_saleend = $saleend->format('Y-m-d H:i:s');

// 初始化预处理语句
$stmt = mysqli_prepare($conn, "UPDATE tableName SET SALEEND = ? WHERE ID = ?");
// 绑定参数(s=字符串,i=整数,根据你的ID类型调整)
mysqli_stmt_bind_param($stmt, "si", $formatted_saleend, $id);
// 执行语句
mysqli_stmt_execute($stmt);
// 关闭语句
mysqli_stmt_close($stmt);

额外方案:直接用MySQL函数处理

如果只是要当前时间加指定间隔,也可以不用PHP处理,直接让MySQL来做:

$stmt = mysqli_prepare($conn, "UPDATE tableName SET SALEEND = NOW() + INTERVAL ? DAY + INTERVAL ? HOUR WHERE ID = ?");
mysqli_stmt_bind_param($stmt, "iii", $saledays, $salehours, $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

内容的提问来源于stack exchange,提问作者user19551234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:10:41