Une section complète pour stocker correctement une valeur DateTime (sous forme de chaîne) dans un SGBDR :
/** @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 );
Comme bindParam nécessite la référence d'une variable, il n'est pas possible de faire quelque chose comme :
// gives an error
$stmt->bindParam( ':date', $date-> format( 'Y-m-d H:i:s'));
Testé avec PHP 7.4.1 ; MariaDB 10.4.10