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

