Cum să: Inserare Înregistrare cu Dată folosind wpdb

24 apr. 2013, 23:07:01
Vizualizări: 20K
Voturi: 2

Dezvolt un plugin unde trebuie să pre-încarc date în tabelele personalizate pe care le creez la Activare. Inserările mele au funcționat bine până acum, până când am încercat să inserez o înregistrare cu un tip de date DATE. Poate cineva să-mi spună ce am greșit aici?

Definiția Tabelei din Baza de Date:

$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);

Inserarea în Baza de Date:

$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);

Am încercat multe metode diferite, cum ar fi folosirea simplă => '2012-08-14', dar nici asta nu funcționează. Sunt sigur că există o sintaxă pe care fie o omit, fie o am greșită.

0
Toate răspunsurile la întrebare 3
0

Poți folosi pur și simplu funcția current_time. De exemplu:

<?php $time = current_time( 'mysql' ); ?>

Funcția va returna un șir de caractere cu data și ora în formatul cerut de MySQL.

Poți afla mai multe detalii aici. Și dacă ești interesat de „problemele de programare legate de fusurile orare”, ai putea citi acest articol Gestionarea timpului și datelor în WordPress.

20 dec. 2016 05:14:57
4

date nu acceptă un șir de caractere lizibil pentru om. Aceasta necesită un timestamp Unix. Trebuie să convertiți acea dată lizibilă într-un timestamp folosind strtotime.

'begin_date'   => date('Y-m-d', strtotime('2012-08-14')),

Desigur, nu este nevoie să convertiți o dată în format AN-LUNA-ZI într-un timestamp doar pentru a o converti înapoi în același format AN-LUNA-ZI.

24 apr. 2013 23:27:16
Comentarii

Există o greșeală de tipar în codul tău. Ai creat end_date dar inserezi date în end-date. O marchez pentru închidere ca 'too localized' dar ai putea pur și simplu să o ștergi.

s_ha_dum s_ha_dum
24 apr. 2013 23:51:10

OMG! Mulțumesc mult! Asta era problema și da, o voi șterge.

clockwiseq clockwiseq
24 apr. 2013 23:53:43

se pare că nu am suficiente credențiale pentru a o șterge, așa că poți să o închizi.

clockwiseq clockwiseq
25 apr. 2013 00:00:04

pentru cei care se uită la asta, nu este nevoie să faceți strtotime pentru 2012-08-14 și apoi să generați același lucru din nou cu date - este suficient doar 'begin_date' => '2012-08-14'

Alex K Alex K
7 iul. 2016 19:21:07
0

Răspunsul acceptat nu este corect. Poți să transmiți formate de date ca șiruri de caractere către baza de date, atâta timp cât acestea sunt formatate într-un mod în care baza de date le poate înțelege (de exemplu 2022-01-15T20:34:34 sau 2022-01-15 20:34:34). Poți găsi specificațiile MariaDB aici, sunt sigur că sunt aceleași ca și pentru MySQL.

16 ian. 2022 21:49:13