Come indicato in Valori letterali di data e ora :
MySQL riconosce DATE
valori in questi formati:
-
Come stringa in
'YYYY-MM-DD'o'AA-MM-GG'formato. È consentita una sintassi "rilassata":qualsiasi carattere di punteggiatura può essere utilizzato come delimitatore tra le parti della data. Ad esempio,'2012-12-31','31/12/2012','2012^12^31'e'example@sqldat.com @31'sono equivalenti. -
Come stringa senza delimitatori in
'YYYYMMDD'o'AAMMGG'format, a condizione che la stringa abbia senso come data. Ad esempio,'20070523'e'070523'vengono interpretati come'2007-05-23', ma'071332'è illegale (ha parti di mese e giorno senza senso) e diventa'0000-00-00'. -
Come numero in
YYYYMMDDoAAMMGGformato, a condizione che il numero abbia senso come data. Ad esempio,19830905e830905vengono interpretati come'1983-09-05'.
Pertanto, la stringa '08/25/2012' non è una data letterale MySQL valida. Hai quattro opzioni (in un vago ordine di preferenza, senza ulteriori informazioni sulle tue esigenze):
-
Configura Datepicker per fornire le date in un formato supportato utilizzando un
altFieldinsieme al suoaltFormatopzione :<input type="hidden" id="actualDate" name="actualDate"/>$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });Oppure, se sei felice che gli utenti vedano la data in
AAAA-MM-GGformat, imposta semplicemente ildateFormatopzione invece:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Usa
STR_TO_DATE( )funzione per convertire la stringa:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Converti la stringa ricevuta da jQuery in qualcosa che PHP interpreta come una data, ad esempio un
DataOraoggetto:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);e poi:
-
ottenere una stringa formattata adatta:
$date = $dt->format('Y-m-d'); -
ottenere il timestamp UNIX:
$timestamp = $dt->getTimestamp();che viene quindi passato direttamente a
DA_UNIXTIME()funzione:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipola manualmente la stringa in un valore letterale valido:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Avviso
-
Il tuo codice è vulnerabile a SQL injection. Tu davvero dovrebbe utilizzare dichiarazioni preparate , in cui si passano le variabili come parametri che non vengono valutati per SQL. Se non sai di cosa sto parlando o come risolverlo, leggi la storia di Tabelle Bobby .
-
Inoltre, come affermato in l'introduzione al capitolo del manuale PHP su
mysql_*funzioni:Questa estensione è deprecata a partire da PHP 5.5.0 e non è consigliata per la scrittura di nuovo codice poiché verrà rimossa in futuro. Invece, il mysqli o PDO_MySQL dovrebbe essere utilizzata l'estensione. Vedi anche la Panoramica API MySQL per ulteriore assistenza nella scelta di un'API MySQL.
-
Sembra che tu stia utilizzando un
DATETIMEoTIMESTAMPcolonna per contenere un valore di data; Ti consiglio di considerare l'utilizzo diDATEdi MySQL digita invece. Come spiegato in IlDATE,DATETIMEeTIMESTAMPTipi :Il
DATAtype viene utilizzato per i valori con una parte data ma senza parte temporale. MySQL recupera e visualizza i valori DATE in'YYYY-MM-DD'formato. L'intervallo supportato è'1000-01-01'a'9999-12-31'.Il
DATETIMEtype viene utilizzato per i valori che contengono parti di data e ora. MySQL recupera e visualizzaDATETIMEvalori in'AAAA-MM-GG HH:MM:SS'formato. L'intervallo supportato è'1000-01-01 00:00:00'a'9999-12-31 23:59:59'.Il
TIMESTAMPil tipo di dati viene utilizzato per i valori che contengono parti di data e ora.TIMESTAMPha un intervallo di'1970-01-01 00:00:01'UTC a'2038-01-19 03:14:07'UTC.