Php PDO::日期参数?

Php PDO::日期参数?,php,mysql,date,types,pdo,Php,Mysql,Date,Types,Pdo,是否存在可用于日期或时间戳的PDO::PARAM挈? 示例代码: $sql = "UPDATE my_table SET current_date = :date WHERE id = 43"; $statement = $pdo->prepare ($sql); $statement->bindValue (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR)

是否存在可用于日期或时间戳的
PDO::PARAM挈?

示例代码:

$sql = "UPDATE my_table SET current_date = :date WHERE id = 43";
$statement = $pdo->prepare ($sql);
$statement->bindValue (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR);
$statement->execute ();

没有。将日期视为字符串

在SQL查询中写入日期时,将其作为字符串写入;您必须对准备好的语句执行相同的操作,并使用
PDO::PARAM_STR
,就像您在建议的代码部分中所做的那样

对于“时间戳”,如果“时间戳”是指:

  • MySQL时间戳数据类型:相同,将作为
    字符串传递
  • PHP Unix时间戳是一个整数:您将向它传递一个
    int

只需使用php日期函数创建日期,就可以解决此问题

$handle->execute(array(":date"=>date("Y-m-d H:i:s", strtotime($date)), PDO::PARAM_STR));
编辑:请注意,
strotime
我不能处理每一件事 一种日期格式

这对我有用

//MS SQL
$sql = "UPDATE my_table SET current_date = GETDATE() WHERE id = 43";
$statement = $pdo->prepare ($sql);
//$statement->bindParam (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR);
$statement->execute ();

您必须将日期视为字符串,但可以创建一个函数,在将其作为参数传递之前检查其是否有效。 像这样:

function checkValidDate($date, $format = "dd-mm-yyyy"){
            if($format === "dd-mm-yyyy"){
            $day = (int) substr($date,0,2);
            $month = (int) substr($date, 3,2);
            $year = (int) substr($date, 6,4);

        }else if($format === "yyyy-mm-dd"){
            $day = (int) substr($date,8,2);
            $month = (int) substr($date, 5,2);
            $year = (int) substr($date, 0,4);
        }

        return checkdate($month, $day, $year);
}

在RDBMS中正确存储日期时间值(作为字符串)的完整部分:

/** @const string app_date_format expected date format in the PHP domain (Swiss) */
define( 'app_date_format', 'd.m.Y' ); 

/** @var PDOConnection $db */
$db = new \PDO( $dsn, $db_user, $db_pass, $db_options );

/** @var DateTime $date */
$date = \DateTime::createFromFormat( app_date_format, '30.11.2020' );

$stmt = $db-> prepare(
    "UPDATE `test`
    SET `test_date` = STR_TO_DATE(:date, '%Y-%m-%d %H:%i:%s' )
    WHERE `test`.`test_id` = :id"
);

$id = 1;
$dateString = $date-> format( 'Y-m-d H:i:s' );

$stmt->bindValue( ':id', $id );
$stmt->bindParam( ':date', $dateString );
$stmt->execute() or die( $db-> error );
由于bindParam需要引用变量,因此无法执行以下操作:

// gives an error
$stmt->bindParam( ':date', $date-> format( 'Y-m-d H:i:s'));

用PHP7.4.1测试;MariaDB 10.4.10

您没有展示如何将参数绑定到PHP生成的日期,而不是mysql GETDATE函数,这对您没有多大帮助……ms precision的情况如何?@ManuelSchneid3r,不是时间戳:“Unix时间(也称为POSIX时间或Unix历元时间)是一种用于描述时间点的系统。它是自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数减去闰秒。”/更简单的方法是,在数据库中将字段定义为VARCHAR(size),并发送带有日期的变量(“Y/m/d”)根据您的时区,如果您想要小时日期(“h:i:s”),则日期将以dd.mm的形式显示。yyyy。至少在我住的地方。不建议将日期存储为字符串,因为它们很有可能被错误解释。这可能是数据库引擎angostic PDO库没有实现日期或日期时间值类型的原因。可能在MySQL或MariaDB中工作,可能在进行中或SQLServer中不起作用。这不是办法,迭戈。在我遇到的每个RDBMS中都有日期格式函数。注意这一点:代码有缺陷且具有误导性。小写常量不符合标准。答案甚至连问题都没有触及asked@YourCommonSense虫子在哪里?标准在哪里?误导在哪里。你需要详细阐述你的常识。