Μορφή PHP date() κατά την εισαγωγή σε datetime στη MySQL

Ποια είναι η σωστή μορφή που πρέπει να περάσω στη συνάρτηση date() της PHP, αν θέλω να εισαγάγω το αποτέλεσμα σε μια στήλη τύπου datetime της MySQL;

Δοκίμαζα την date("Y-M-D G:i:s") αλλά αυτό εισάγει απλά την "0000-00-00 00:00:00:00" κάθε φορά.

Λύση

Το πρόβλημα είναι ότι χρησιμοποιείτε τα 'M' και 'D', τα οποία είναι αναπαραστάσεις κειμένου, η MySQL περιμένει μια αριθμητική αναπαράσταση της μορφής 2010-02-06 19:30:13.

Δοκιμάστε: date("Y-m-d H:i:s") που χρησιμοποιεί τα αριθμητικά ισοδύναμα.

edit: άλλαξα το G σε H, αν και μπορεί να μην έχει αντίκτυπο, πιθανώς να θέλετε να χρησιμοποιήσετε 24ωρη μορφή με 0 μπροστά.

Σχόλια (7)

Από τα σχόλια της php's date() manual page:

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

Είχατε το 'Y' σωστά - αυτό'είναι ένα πλήρες έτος, αλλά το 'M' είναι ένας μήνας τριών χαρακτήρων, ενώ το 'm' είναι ένας διψήφιος μήνας. Το ίδιο θέμα με το 'D' αντί για το 'd' Το 'G' είναι μια 1 ή 2ψήφια ώρα, ενώ το 'H' έχει πάντα ένα 0 μπροστά, όταν χρειάζεται.

Σχόλια (3)

Ακολουθεί μια εναλλακτική λύση: αν έχετε την ημερομηνία στην PHP ως χρονοσφραγίδα, παρακάμψτε το χειρισμό της με την PHP και αφήστε τη ΒΔ να αναλάβει το μετασχηματισμό της χρησιμοποιώντας τη συνάρτηση FROM_UNIXTIME.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
Σχόλια (7)