Conseguir um objeto PHP DateTime em uma representação em cadeia de uma data MYSQL
Pergunta
Eu tenho um DateTime que eu quero para armazenar em uma coluna Data MySQL. Eu estou usando MySQLi e declarações preparadas.
Quando os parâmetros de ligação, não posso especificar a data como um tipo, apenas strings e inteiros.
Como faço para converter o DateTime para uma representação de cadeia data MySQL? Há muito pouca documentação sobre a classe DateTime.
Solução
Eu quase fechado esta como uma duplicata de do MySQL data e hora para outro formato com PHP , mas eu acho que é realmente o problema inverso. Que pergunta como formatar uma data obtido a partir do MySQL, e você está perguntando como formatar uma data para a entrada para uma consulta.
Opção 1:
SELECT * FROM MyTable WHERE DateTimeCol = ?
Você pode formatar o valor para o formato YYYY-MM-DD HH:MM
MySQL quer:
<?php $mysql_date = date('Y-m-d H:i:s', $timestamp); ?>
Em seguida, enviá-lo como um parâmetro de cadeia de consulta.
Opção 2:
SELECT * FROM MyTable WHERE DateTimeCol = FROM_UNIXTIME(?)
Em seguida, você pode enviar o valor timestamp como um parâmetro numérico para a consulta.
Opção 3:
SELECT * FROM MyTable WHERE DateTimeCol = STR_TO_DATE(?, '%m/%d/%y')
Você pode enviar uma ampla variedade de representações de seqüência de data / hora, se você especificar a formatação a MySQL de STR_TO_DATE()
função. Para os códigos de formatação, consulte o DATE_FORMAT()
função.
Outras dicas
Porque o DateTime classe introduzida com PHP5 está mal documentada, eu não recomendo usá-lo. Acho timestamps regulares para ser muito mais fácil trabalhar com!
Mas se você ainda quiser usar DateTime-objetos, uma solução seria a de transformar os objetos em (unix) timestamps antes de armazená-los em seu banco de dados. Transformar as marcas de tempo voltar para DateTime os objetos depois de ler informações do seu banco de dados.
Para criar DateTime-objeto de um timestamp, use date_create () com o timestamp como argumento. Para obter seus objetos representação do número de segundos desde o Unix Epoch, use date_format ($ object, 'U') (maiúsculas U).