Подстановка переменных в подготовленных инструкциях PDO не поддерживает массивы. Это один на один.
Вы можете обойти эту проблему, создав необходимое количество заполнителей на основе длины массива.
$variables = array ('1', '2', '3');
$placeholders = str_repeat ('?, ', count ($variables) - 1) . '?';
$query = $pdo -> prepare ("SELECT * FROM table WHERE column IN($placeholders)");
if ($query -> execute ($variables)) {
// ...
}
Нет ничего, что мешало бы использовать ADDTIME ()
в INSERT
OR UPDATE
, но DATE_ADD ()
, вероятно, то, что будет работать лучше всего:
INSERT INTO table_name
SET my_datetime = DATE_ADD('2009-11-01 19:30:00', INTERVAL 4 HOURS),
...other insert columns here... ;
А как насчет:
date( "Y-m-d H:i:s", strtotime( "2009-08-09 23:44:22" )+4*60*60 )
или даже
date( "Y-m-d H:i:s", strtotime( "2009-08-09 23:44:22 + 4 hours" ) )
Может потребоваться небольшая проверка ошибок, но это должно решить вашу проблему.
Или лучше в SQL
DATE(DATE_ADD(`Table`.`Column`, INTERVAL 4 HOURS))
Похоже, что для TZ вашей базы данных установлено значение GMT (UTC), как и должно быть. При добавлении в базу данных вам необходимо преобразовать местную дату в GMT.
из Справочного руководства MySQL 5.1:
CONVERT_TZ(dt,from_tz,to_tz)
CONVERT_TZ () преобразует значение datetime dt из часового пояса, заданного from_tz, в часовой пояс, заданный to_tz и возвращает полученное значение. Часовые пояса могут быть указаны, как описано в Разделе 5.10.8, «Поддержка часовых поясов сервера MySQL». Эта функция возвращает NULL, если аргументы недопустимы.
Если значение выпадает из поддерживаемого диапазона типа TIMESTAMP при преобразовании fom from_tz в UTC, преобразование не происходит. Диапазон TIMESTAMP описан в Раздел 11.1.2, «Обзор типов даты и времени».
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'
Для всех ответов, использующих DATE_ADD, правильный синтаксис - «4 ЧАСА», а не «4 ЧАСА» (по крайней мере, в текущей версии MySQL):
UPDATE table SET field = DATE_ADD (field, INTERVAL 4 HOUR);
Я использовал этот метод:
$format = Y-m-d; //you can use any format if you want
$date = $row['date']; // from mysql_fetch_array
$date2 = date($format, strtotime("$date + 4 week"));
echo $date;