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
相关产品推荐
相关产品推荐

