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