Как я понимаю, это потому, что PDO будет рассматривать содержимое $ in_values как отдельный элемент и будет вполне соответствующим образом. PDO увидит 1,2,3 как одну строку, поэтому запрос будет выглядеть примерно как
SELECT * FROM table WHERE my_value IN ("1,2,3")
Вы может подумать, что изменение impode будет иметь кавычки и запятые, чтобы исправить это, но это не будет. PDO увидит цитаты и изменит, как она цитирует строку.
Что касается того, почему ваш запрос соответствует первому значению, у меня нет объяснений.
Вы можете иметь два столбца типа timestamp в одной таблице.
Следующее работает для MySQL 5.0
create table t ( id integer, created_at timestamp default current_timestamp, updated_at timestamp );
Я думаю, вы путаете это с SQL Server (где метка времени на самом деле не является «меткой времени», и действительно существует ограничение на один столбец «метка времени»)
Править : Но вам понадобится триггер для обновления столбца update_at при каждом изменении строки.
Вам понадобятся два столбца: CREATE_TIME и UPDATE_TIME.
Вы можете добавить CREATE_USER и UPDATE_USER.
Возможно, вы захотите иметь отношение 1: многие с именем измененного столбца, старыми и новыми значениями.
Это все часть сбора измененных данных. У вас могут быть таблицы CDC, которые обновляются с помощью триггеров.
Я бы оставил текущую метку времени так, как вы предлагали, и заполню поле created_at текущей датой при вставке.
Насколько мне известно, обходного пути для этого ограничения нет. Вам нужно будет вручную установить (как минимум) одну из временных меток. Самый простой способ - просто добавить updated = NOW ()
в запрос UPDATE
.