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

PDO执行UPDATE时字符串转DATE类型存储报错,求正确实现方式

如何将字符串日期存入MySQL的DATE类型字段?

你的问题根源在于SQL语法错误+不安全的变量拼接方式:

  • 直接写2022-07-01会被MySQL解析成数学运算(2022-7-1),而非日期值;你用的(DATE) $Date_Courant是错误的类型转换语法。
  • 直接把变量拼进SQL语句存在严重的SQL注入风险。

下面是两种正确的实现方式:

推荐方案:PDO预处理语句(参数绑定)

这是最安全、规范的做法,自动处理语法转义,彻底避免注入:

// 准备预处理SQL
$stmt = $pdo->prepare("UPDATE `$table_final` SET `Date_B` = :date, `Id_SB` = :station_id");

// 绑定参数,指定类型更严谨
$stmt->bindParam(':date', $Date_Courant);
$stmt->bindParam(':station_id', $NoStation, PDO::PARAM_INT);

// 执行语句并获取受影响行数
$affectedRows = $stmt->execute();

只要你的$Date_Courant是YYYY-MM-DD这种标准日期格式,MySQL会自动将其识别为DATE类型存入字段,无需额外转换。

临时修复方案:给日期加单引号(不推荐)

如果只是临时测试解决语法问题(不建议用于生产环境),可以给日期变量包裹单引号:

// 注意:存在SQL注入风险,仅临时使用
$affectedRows = $pdo->exec("UPDATE `$table_final` SET `Date_B` = '$Date_Courant', `Id_SB` = $NoStation");

或者使用正确的CAST语法(同样需要加单引号):

$affectedRows = $pdo->exec("UPDATE `$table_final` SET `Date_B` = CAST('$Date_Courant' AS DATE), `Id_SB` = $NoStation");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:30:24