Come Inserire un Record con Data usando wpdb

24 apr 2013, 23:07:01
Visualizzazioni: 20K
Voti: 2

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.

0
Tutte le risposte alla domanda 3
0

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.

20 dic 2016 05:14:57
4

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.

24 apr 2013 23:27:16
Commenti

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.

s_ha_dum s_ha_dum
24 apr 2013 23:51:10

Oddio! Grazie mille! Era quello e sì, lo cancellerò.

clockwiseq clockwiseq
24 apr 2013 23:53:43

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

clockwiseq clockwiseq
25 apr 2013 00:00:04

per altri che stanno guardando questo, non c'è bisogno di fare strtotime di 2012-08-14 e poi generare lo stesso valore di nuovo con date - basta 'begin_date' => '2012-08-14'

Alex K Alex K
7 lug 2016 19:21:07
0

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.

16 gen 2022 21:49:13