PDO :: PARAM的日期?

时间:2010-03-03 20:20:11

标签: php mysql date types pdo

是否存在一些可用于日期或时间戳的PDO::PARAM_???

示例代码:

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

6 个答案:

答案 0 :(得分:89)

在SQL查询中编写日期时,您将其写为字符串;你必须对准备好的语句做同样的事情,并使用PDO::PARAM_STR,就像你在你提出的代码部分中所做的那样。

对于“时间戳”,如果用“timestamp”表示:

  • MySQL时间戳数据类型:它是相同的,你将它作为string传递
  • PHP Unix时间戳,它是一个整数:你将传递给它int

答案 1 :(得分:16)

只需使用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)无法处理每一个问题   种类的日期格式。

答案 2 :(得分:5)

不。将日期视为字符串。

答案 3 :(得分:-1)

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

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);
}

答案 4 :(得分:-1)

一个完整的部分,用于在DDBMS中正确存储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;
$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'));

通过PHP 7.4.1测试; MariaDB 10.4.10

答案 5 :(得分:-3)

这对我有用。

//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 ();