Sebagaimana dinyatakan dalam Literal Tanggal dan Waktu :
MySQL mengenali
DATEnilai dalam format berikut:
Sebagai string dalam
'YYYY-MM-DD'atau'YY-MM-DD'format. Sintaks "santai" diizinkan:Karakter tanda baca apa pun dapat digunakan sebagai pembatas antara bagian tanggal. Misalnya,'2012-12-31','2012/12/31','2012^12^31', dan'example@sqldat.com @31'setara.Sebagai string tanpa pembatas di
'YYYYMMDD'atau'YYMMDD'format, asalkan string masuk akal sebagai tanggal. Misalnya,'20070523'dan'070523'ditafsirkan sebagai'2007-05-23', tapi'071332'ilegal (memiliki bagian bulan dan hari yang tidak masuk akal) dan menjadi'0000-00-00'.Sebagai angka dalam
YYYYMMDDatauYYMMDDformat, asalkan nomor tersebut masuk akal sebagai tanggal. Misalnya,19830905dan830905ditafsirkan sebagai'1983-09-05'.
Oleh karena itu, string '08/25/2012' bukan literal tanggal MySQL yang valid. Anda memiliki empat opsi (dalam urutan preferensi yang tidak jelas, tanpa informasi lebih lanjut tentang kebutuhan Anda):
-
Konfigurasikan Datepicker untuk memberikan tanggal dalam format yang didukung menggunakan
altFieldbersama denganaltFormatpilihan :<input type="hidden" id="actualDate" name="actualDate"/>$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });Atau, jika Anda senang pengguna melihat tanggal di
YYYY-MM-DDformat, cukup aturdateFormatpilihan sebagai gantinya:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Gunakan MySQL
STR_TO_DATE( )fungsi untuk mengubah string:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Ubah string yang diterima dari jQuery menjadi sesuatu yang dipahami PHP sebagai tanggal, seperti
TanggalWaktuobjek:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);dan kemudian:
-
dapatkan string berformat yang sesuai:
$date = $dt->format('Y-m-d'); -
dapatkan stempel waktu UNIX:
$timestamp = $dt->getTimestamp();yang kemudian diteruskan langsung ke
FROM_UNIXTIME()fungsi:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulasi string secara manual menjadi literal yang valid:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Peringatan
-
Kode Anda rentan terhadap injeksi SQL. Anda benar-benar harus menggunakan pernyataan yang disiapkan , tempat Anda meneruskan variabel sebagai parameter yang tidak dievaluasi untuk SQL. Jika Anda tidak tahu apa yang saya bicarakan, atau cara memperbaikinya, baca kisah Meja Bobby .
-
Juga, seperti yang dinyatakan dalam pendahuluan ke bab manual PHP di
mysql_*fungsi:Ekstensi ini tidak digunakan lagi pada PHP 5.5.0, dan tidak disarankan untuk menulis kode baru karena akan dihapus di masa mendatang. Sebagai gantinya, mysqli atau PDO_MySQL ekstensi harus digunakan. Lihat juga Ikhtisar MySQL API untuk bantuan lebih lanjut saat memilih API MySQL.
-
Anda tampaknya menggunakan
DATETIMEatauTIMESTAMPkolom untuk menyimpan nilai tanggal; Saya sarankan Anda mempertimbangkan untuk menggunakanDATEMySQL ketik sebagai gantinya. Seperti yang dijelaskan dalamDATE,DATETIME, danTIMESTAMPJenis :Tanggal
TANGGALtype digunakan untuk nilai dengan bagian tanggal tetapi tidak ada bagian waktu. MySQL mengambil dan menampilkan nilai DATE di'YYYY-MM-DD'format. Rentang yang didukung adalah'1000-01-01'ke'9999-12-31'.DATETIMEtype digunakan untuk nilai yang berisi bagian tanggal dan waktu. MySQL mengambil dan menampilkanDATETIMEnilai dalam'YYYY-MM-DD HH:MM:SS'format. Rentang yang didukung adalah'1000-01-01 00:00:00'ke'9999-12-31 23:59:59'.TIMESTAMPtipe data digunakan untuk nilai yang berisi bagian tanggal dan waktu.TIMESTAMPmemiliki rentang'1970-01-01 00:00:01'UTC ke'2038-01-19 03:14:07'UTC.