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

PHP生成带前导零的日期ID插入SQL时丢失前导零问题求助

问题根源

你在拼接SQL语句时,未将格式化后的日期字符串用引号包裹,SQL会将其解析为数值类型,数值类型的前导零会被自动丢弃,哪怕后续插入字符串类型的列,也会使用丢弃前导零后的数值转字符串的结果,这就是你修改列类型仍无法解决问题的原因。

修复方案

方案1:直接补全引号(临时解决方案,仅适用于当前完全可控的日期生成场景,存在SQL注入风险)

将SQL语句中的变量部分用单引号包裹:

$addQuery = "INSERT INTO nodes (id) VALUES ('$date')";

方案2:使用参数化查询(推荐,安全且能避免类型解析问题)

sqlsrv扩展支持参数绑定,无需手动处理引号和类型转换,示例代码如下:

$date = new DateTime();
$date = $date->format("dmYHisu");
$addQuery = "INSERT INTO nodes (id) VALUES (?)";
$params = [$date];
if (sqlsrv_query($connection, $addQuery, $params)) {
    echo "Node added.";
} else {
    die (print_r(sqlsrv_errors(), true));
}

额外说明

如果你将ID列设置为int类型,本身数值类型就不支持存储前导零,要保留前导零必须使用char/varchar类的字符串类型,配合上面的传参方式即可正常存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:03