Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    [php+mysql] data da mysql sbagliata

    Buonasera, probabilmente questo è un argomento già affrontato migliaia di volte, è da ore che giro sul forum in cerca di una risposta chiara, e più volte ho applicato i vostri consigli ma non ne vengo fuori.

    io inserisco in un campo di mysql la data corrente dell'esecuzione di uno script php , attraverso il codice

    codice:
    $data = date('Y-m-d');
    e poi con l'adeguata query.

    il campo nel db è di tipo TIMESTAMP, e quando richiamo in una pagina il valore attraverso questo codice

    codice:
    echo date("Y-m-d", $row[data]);
    mi esce però una data totalmente sballata ovvero:


    2038-01-19

    mentre dovrebbe essere

    2006-02-10


    Probabilmente è una sciocchezza, ma mi potete dare una dritta semplice semplice?

    grazie in anticipo!
    NOISE! [and melody]
    www.notyet.it - www.myspace.com/acidheadmusic

  2. #2
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    la data che ti restituisce è la formattazione del valore massimo di un intero a 32-bit (con segno).
    ...
    la cosa in effetti è strana...
    cmq sia la funzione date() vuole in argomento una stringa con il formato e un intero, non un dato di tipo timestamp.
    magari è una cavolata cmq prova a fare un casting del genere:
    echo date("Y-m-d", (int)$row[data]);

    poi facci sapere

  3. #3
    Ma è un timestamp o un campo datetime? il timestamp viene aggiornato e gestito automaticamente dal database mentre il datetime sei tu a gestirlo.... prova a fare la stessa cosa su un campo datetime, come seconda cosa prova a specificare con la funzione DATE di mysql (a memoria non mi viene la sintassi esatta dovrebbe però essere date(campo, formato) ) e vedi che ti esce....

  4. #4
    il risultato che ti ti da (2038- ...) è giustissimo penso ...

    La funzione date() vuole il parametro data sotto forma di UNIX timestamp (numero di secondi trascorsi dal 1970), mentre in MySQL anche se il campo di chiama TIMESTAMP salva in un altro formato '0000-00-00 00:00:00', dunque tu quando fai il select e vai a leggere il valore salvato se lo vuoi passare a date(); devi trasformarlo in UNIX timestamp.

    Prova con qualcosa come SELECT UNIX_TIMESTAMP(`data`) AS `data` FROM tua_tabella; otterrai un UNIX timestamp direttamente senza doverti metter a calcolarlo

  5. #5
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da spoon25
    il risultato che ti ti da (2038- ...) è giustissimo penso ...

    La funzione date() vuole il parametro data sotto forma di UNIX timestamp (numero di secondi trascorsi dal 1970), mentre in MySQL anche se il campo di chiama TIMESTAMP salva in un altro formato '0000-00-00 00:00:00', dunque tu quando fai il select e vai a leggere il valore salvato se lo vuoi passare a date(); devi trasformarlo in UNIX timestamp.
    è quello che pensavo anche io, ma il prototipo della funzione dice che non vuole neanche un tipo timestamp bensì un intero...

    codice:
    string date ( string formato [, int timestamp] )
    comunque sia per trasformare il tipo timestamp di mysql nel tipo timestamp di unix (quello vero) dovrebbe esserci una funzione di mysql apposta.

    manuale dixit:
    codice:
    Per generare un timestamp da una stringa rappresentante la
    data, devi sapere usare strtotime(). In aggiunta, dei 
    databases hanno funzioni che convertono i loro formati di 
    data in timestamps (come la funzione di MySQL, 
    UNIX_TIMESTAMP).
    potresti quindi provare così:
    $sql="SELECT UNIX_TIMESTAMP(data) as data FROM tabella WHERE ...";
    ...
    echo date("Y-m-d", $row[data]);


    se non riesci in questo modo (o con il casting che ti ho proposto prima) ti consiglio anche io di usare direttamente il tipo "data" in mysql.

  6. #6
    non ci riesco. mi restituisce sempre

    1970-01-01


    utilizando il metodo consigliato nell'ultimo post, per il suggerimento del casting non funziona.
    Quindi come da voi affermato, userei la data di mysql, quindi devo rifare la query di inserimento e di estrapolazione.
    Solo che non so la sintassi, a dire il vero non sapevo nenche della questione unix ( ci sto studiando ancora su sul php! ).

    Potete postarmi 2 righette con il codice giusto? cosi me lo segno del quaderno degli appunti!

    grazie
    :master:
    NOISE! [and melody]
    www.notyet.it - www.myspace.com/acidheadmusic

  7. #7
    Scusa una cosa,

    ma se fai una INSERT INTO TABLELLA (CAMPO_DELLA_DATA ...) VALUES ("20060211")

    e poi fai una select che ti dice?

  8. #8
    io dentro la tabella ho 20060211

    quando richiamo faccio la query cosi

    codice:
    SELECT data  FROM recensione


    e poi la scrivo cosi


    codice:
    echo date("Y-m-d", $row[data]);

    il risultato è 1970-08-21
    NOISE! [and melody]
    www.notyet.it - www.myspace.com/acidheadmusic

  9. #9
    Originariamente inviato da GoPlastic
    io dentro la tabella ho 20060211
    e questo che tipo di dato dovrebbe essere ? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    il dato che mi va dentro al campo timestamp del db usando



    codice:
    $data = date('Y-m-d');

    lo so che sbaglio qualcosa!
    NOISE! [and melody]
    www.notyet.it - www.myspace.com/acidheadmusic

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.