是否有一些 PDO::PARAM_???可用于日期或时间戳?
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,就像您在提议的代码部分中所做的那样。
PDO::PARAM_STR
对于“时间戳”,如果你说的“时间戳”是指:
string
int
只需使用 php date 函数创建日期就可以解决这个问题。
$handle->execute(array(":date"=>date("Y-m-d H:i:s", strtotime($date)), PDO::PARAM_STR));
编辑: 请注意,strtotime (http://php.net/manual/en/function.strtotime.php)不能处理每个 日期格式。
strtotime
这招对我很管用。
//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 中正确存储 DateTime 值(作为字符串)的完整部分:
/** @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; $stmt->bindValue( ':id', $id ); $stmt->bindValue( ':date', $date-> format( 'Y-m-d H:i:s')); $stmt->execute() or die( $stmt-> errorInfo()[2] );
使用 PHP 7.4.25; MariaDB 10.6.4进行测试