Mysql
 sql >> Base de données >  >> RDS >> Mysql

Format de date d'insertion PHP mysql

Comme indiqué dans Littéraux de date et d'heure :

MySQL reconnaît DATE valeurs dans ces formats :

  • Sous forme de chaîne au format 'YYYY-MM-DD' ou 'AA-MM-JJ' format. Une syntaxe "assouplie" est autorisée :tout caractère de ponctuation peut être utilisé comme délimiteur entre les parties de date. Par exemple, '2012-12-31' , '2012/12/31' , '2012^12^31' , et '[email protected] @31' sont équivalents.

  • Sous forme de chaîne sans délimiteurs dans l'un ou l'autre 'YYYYMMDD' ou 'AAMMJJ' format, à condition que la chaîne ait un sens en tant que date. Par exemple, '20070523' et '070523' sont interprétés comme '2007-05-23' , mais '071332' est illégal (il contient des parties de mois et de jour qui n'ont pas de sens) et devient '0000-00-00' .

  • Sous forme de nombre au format AAAAMMJJ ou AAMMJJ format, à condition que le nombre ait un sens en tant que date. Par exemple, 19830905 et 830905 sont interprétés comme '1983-09-05' .

Par conséquent, la chaîne '08/25/2012' n'est pas un littéral de date MySQL valide. Vous avez quatre options (dans un vague ordre de préférence, sans autre information sur vos besoins) :

  1. Configurez Datepicker pour fournir des dates dans un format pris en charge à l'aide d'un altField avec son altFormat possibilité :

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    Ou, si vous souhaitez que les utilisateurs voient la date au format AAAA-MM-JJ format, définissez simplement le dateFormat possibilité à la place :

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Utilisez MySQL STR_TO_DATE( ) fonction pour convertir la chaîne :

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Convertissez la chaîne reçue de jQuery en quelque chose que PHP comprend comme une date, comme un DateHeure objet :

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    puis soit :

    • obtenir une chaîne formatée appropriée :

      $date = $dt->format('Y-m-d');
      
    • obtenir l'horodatage UNIX :

      $timestamp = $dt->getTimestamp();
      

      qui est ensuite transmis directement au FROM_UNIXTIME() fonction :

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipulez manuellement la chaîne dans un littéral valide :

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

Avertissement

  1. Votre code est vulnérable à l'injection SQL. Vous vraiment devrait utiliser instructions préparées , dans lequel vous transmettez vos variables en tant que paramètres qui ne sont pas évalués pour SQL. Si vous ne savez pas de quoi je parle ou comment y remédier, lisez l'histoire de Bobby Tables .

  2. Aussi, comme indiqué dans l'introduction au chapitre du manuel PHP sur mysql_* fonctions :

    Cette extension est obsolète depuis PHP 5.5.0 et n'est pas recommandée pour l'écriture de nouveau code car elle sera supprimée à l'avenir. Au lieu de cela, soit le mysqli ou PDO_MySQL l'extension doit être utilisée. Voir aussi la Présentation de l'API MySQL pour plus d'aide lors du choix d'une API MySQL.

  3. Vous semblez utiliser soit un DATETIME ou TIMESTAMP colonne pour contenir une valeur de date ; Je vous recommande d'utiliser le DATE de MySQL tapez à la place. Comme expliqué dans La DATE , DATEHEURE , et TIMESTAMP Genre :

    La DATE type est utilisé pour les valeurs avec une partie date mais pas de partie heure. MySQL récupère et affiche les valeurs DATE dans 'YYYY-MM-DD' format. La plage prise en charge est '1000-01-01' à '9999-12-31' .

    Le DATETIME type est utilisé pour les valeurs qui contiennent à la fois des parties de date et d'heure. MySQL récupère et affiche DATETIME valeurs en 'AAAA-MM-JJ HH:MM:SS' format. La plage prise en charge est '1000-01-01 00:00:00' à '9999-12-31 23:59:59' .

    Le TIMESTAMP Le type de données est utilisé pour les valeurs qui contiennent à la fois des parties de date et d'heure. TIMESTAMP a une plage de '1970-01-01 00:00:01' UTC à '2038-01-19 03:14:07' UTC.