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

PHP中已引用日期仍被减法运算导致更新后为0000-00-00的问题排查

问题分析与解决

你的问题出在UPDATE语句的语法错误上,这直接导致日期被错误处理成0000-00-00,咱们一步步拆解:

核心错误:SET子句的字段分隔符用错了

在MySQL的UPDATE语句中,多个字段的更新应该用**逗号(,)**分隔,而你用了AND——这会让MySQL把整个date = 'xxx' AND boolean = 'yyy'当成一个布尔逻辑表达式来计算,结果要么是1(真)要么是0(假),然后把这个数值赋值给date字段。日期类型的字段无法识别整数0,就会被转换成0000-00-00。

修正后的基础写法

先把UPDATE语句的语法改对:

$format_date = date("Y-m-d", strtotime($date));
// 把SET里的AND换成逗号
$newinfo = "UPDATE tickets 
            SET `date` = '" . mysqli_real_escape_string($connct,$format_date) . "', 
                `boolean` = '" . mysqli_real_escape_string($connct,$booleancheck) . "' 
            WHERE `id` = '" . mysqli_real_escape_string($connct,$id) . "' ";
$update_this = mysqli_query($connct, $newinfo);

更安全的优化写法:使用预处理语句

直接拼接字符串虽然用了mysqli_real_escape_string,但还是有潜在的SQL注入风险,推荐用预处理语句来彻底避免这个问题,同时也能减少手动拼接时容易犯的语法错误:

$format_date = date("Y-m-d", strtotime($date));
// 准备预处理语句
$stmt = mysqli_prepare($connct, "UPDATE tickets SET `date` = ?, `boolean` = ? WHERE `id` = ?");
// 绑定参数(s代表字符串,若id是整数则替换成i更合适)
mysqli_stmt_bind_param($stmt, "ssi", $format_date, $booleancheck, $id);
// 执行语句
mysqli_stmt_execute($stmt);
// 关闭语句
mysqli_stmt_close($stmt);

这样调整后,日期就能正常更新,同时代码的安全性也能得到提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:49