PDO:: PARAM для дат?

Существует ли какой-либо 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 ();

Ответ 1

При записи даты в SQL-запросе вы пишете ее как строку; вы должны сделать то же самое с подготовленными инструкциями и использовать PDO::PARAM_STR, как и в той части кода, которую вы предложили.

И для "метки времени", если по "отметке времени" вы имеете в виду:

  • Тип данных timestamp MySQL: это то же самое, вы передадите его как string
  • Временная метка PHP Unix, которая является целым числом: вы передадите ее int.

Ответ 2

Простое создание даты с помощью функции 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) не может обрабатывать все виды форматов даты.

Ответ 3

Неа. Лечить дату как строку.

Ответ 4

Вы должны рассматривать дату как строку, но вы можете создать функцию для проверки, является ли допустимой датой, прежде чем передать ее как параметр. Вот так:

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

Ответ 5

Это сработало для меня.

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