Come Inserire un Record con Data usando wpdb
Sto sviluppando un plugin dove ho bisogno di pre-caricare alcuni dati nelle tabelle personalizzate che creo durante l'attivazione. I miei inserimenti hanno funzionato bene finora, fino a quando non ho tentato di inserire un record con un tipo di dato DATE. Qualcuno può dirmi dove ho sbagliato?
Definizione della Tabella Database:
$sql = "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE. " (
id mediumint(12) NOT NULL AUTO_INCREMENT,
academicyear VARCHAR(200) NOT NULL,
begin_date date NOT NULL,
end_date date NOT NULL,
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id));";
$wpdb->query($sql);
Inserimento nel Database:
$current_year = array(
'academicyear' => '2012 - 2013',
'begin_date' => date('Y-m-d', '2012-08-14'),
'end-date' => date('Y-m-d', '2013-05-31')
);
$wpdb->insert($wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE, $current_year);
Ho provato diversi metodi come utilizzare semplicemente => '2012-08-14' ma non funziona neanche questo. Sono sicuro che c'è qualche sintassi che mi manca o che ho sbagliato.

Puoi semplicemente utilizzare la funzione current_time
. Ad esempio:
<?php $time = current_time( 'mysql' ); ?>
La funzione restituirà la stringa data-ora richiesta da mysql.
Puoi trovare maggiori dettagli qui. E se sei interessato ai "problemi di programmazione legati ai fusi orari", potresti voler leggere questo articolo Gestione di orari e date in WordPress.

date
non accetta una stringa leggibile dall'uomo. Richiede un timestamp Unix. Devi convertire quella data umana in un timestamp con strtotime
.
'begin_date' => date('Y-m-d', strtotime('2012-08-14')),
Naturalmente, non c'è alcun bisogno di convertire una data in formato ANNO-MESE-GIORNO in un timestamp solo per riconvertirla nello stesso formato ANNO-MESE-GIORNO.

C'è un errore di battitura nel tuo codice. Hai creato end_date
ma stai inserendo i dati in end-date
. Lo segnalo per la chiusura come 'troppo localizzato' ma potresti semplicemente eliminarlo.

A quanto pare non ho credenziali sufficienti per eliminarlo, quindi puoi chiuderlo tu.

La risposta accettata non è corretta. È possibile passare formati di data come stringa al database, purché siano formattati in un modo che il database possa comprendere (ad esempio 2022-01-15T20:34:34
o 2022-01-15 20:34:34
). Puoi trovare le specifiche di MariaDB qui, sono abbastanza sicuro che siano le stesse di MySQL.
