gpt4 book ai didi

php - 准备似乎从字符串中删除引号,以便 mysql 日期时间字段不接受它

转载 作者:行者123 更新时间:2023-11-30 00:58:24 25 4
gpt4 key购买 nike

我想在准备好的语句中使用 php STRING 更新 DATETIME mysql 字段

$stmt = $mysqli->prepare("UPDATE TABLE1 SET DATETIME1 = ? where ID = ?");
$stmt->bind_param('si',$date,$id);
$date = "2013-12-04 00:00:00"; /*string '2013-12-04 00:00:00' (length=19)*/
$id = 4;
$stmt->execute();

我原以为 mysql 应该将该语句视为

UPDATE TABLE1 SET DATETIME1 = '2013-12-04 00:00:00' where ID = ?; 
/*which works when directly entered*/

但是我认为它的待遇就像

UPDATE TABLE1 SET DATETIME1 = 2013-12-04 00:00:00 where ID = ?; 
/*giving the result of null*/

我尝试添加使用 STR_TO_DATE mysql 函数来强制它将 $date 视为字符串,然后将其转换为 DATETIME。即

$stmt = $mysqli->prepare("UPDATE TABLE1 SET DATETIME1 = STR_TO_DATE(?,'%Y-%m-%d %T') where ID = ?"); 
/*again the result is null*/

我需要绑定(bind)带引号的字符串吗?我错过了什么?

最佳答案

以如此晦涩的方式准备它、绑定(bind)它然后执行它没有多大意义。除了评论中概述的问题外,还可以考虑将其更改为:

$date = "2013-12-04 00:00:00";  /*string '2013-12-04 00:00:00' (length=19)*/
$id = 4;

$stmt = $mysqli->prepare("UPDATE TABLE1 SET DATETIME1 = ? where ID = ?");
$stmt->execute(array($date, $id));

此外,你绑定(bind)它们的方式是错误的。您使用了准备语句,但随后绑定(bind)了三个值(或两个值和一个错误设置的参数)。请refer to the documentation for more info about binding parameters .

请注意,PHP >= 5.4你可以简单地做:

$date = "2013-12-04 00:00:00";  /*string '2013-12-04 00:00:00' (length=19)*/
$id = 4;

$stmt = $mysqli->prepare("UPDATE TABLE1 SET DATETIME1 = ? where ID = ?");
$stmt->execute([$date, $id]);

关于php - 准备似乎从字符串中删除引号,以便 mysql 日期时间字段不接受它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com