Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Format tanggal penyisipan mysql PHP

Sebagaimana dinyatakan dalam Literal Tanggal dan Waktu :

MySQL mengenali DATE nilai 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 '[email protected] @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 YYYYMMDD atau YYMMDD format, asalkan nomor tersebut masuk akal sebagai tanggal. Misalnya, 19830905 dan 830905 ditafsirkan 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):

  1. Konfigurasikan Datepicker untuk memberikan tanggal dalam format yang didukung menggunakan altField bersama dengan altFormat pilihan :

    <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-DD format, cukup atur dateFormat pilihan sebagai gantinya:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Gunakan MySQL STR_TO_DATE( ) fungsi untuk mengubah string:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Ubah string yang diterima dari jQuery menjadi sesuatu yang dipahami PHP sebagai tanggal, seperti TanggalWaktu objek:

    $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))
      
  4. Manipulasi string secara manual menjadi literal yang valid:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Peringatan

  1. 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 .

  2. 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.

  3. Anda tampaknya menggunakan DATETIME atau TIMESTAMP kolom untuk menyimpan nilai tanggal; Saya sarankan Anda mempertimbangkan untuk menggunakan DATE MySQL ketik sebagai gantinya. Seperti yang dijelaskan dalam DATE , DATETIME , dan TIMESTAMP Jenis :

    Tanggal TANGGAL type 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' .

    DATETIME type digunakan untuk nilai yang berisi bagian tanggal dan waktu. MySQL mengambil dan menampilkan DATETIME nilai 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' .

    TIMESTAMP tipe data digunakan untuk nilai yang berisi bagian tanggal dan waktu. TIMESTAMP memiliki rentang '1970-01-01 00:00:01' UTC ke '2038-01-19 03:14:07' UTC.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hitung perbedaan antara dua datetime di MySQL

  2. Mengapa kondisi IN lebih lambat dari =di sql?

  3. GALAT:Galat 1005:Tidak dapat membuat tabel (errno:121)

  4. MySQL INT artinya

  5. Laravel-5 'LIKE' setara (Fasih)