WebFrameWorker

gennaio 21, 2007

screzi tra PEAR DataObject e datetime (MySql)

Filed under: DataObject,datetime,Pear,PHP — stablum @ 3:27 pm

Oggi ho potuto sperimentare come il DataObject non abbia in particolare simpatia il tipo datetime mentre tentavo di fare un override del metodo dataobject::insert() per impostare il timestamp di inserimento di un record.

Assumento un dataobject $do con un campo data tipo datetime è un impresa impostare la data al giorno attuale.

Il primo tentativo $do->data = now() ovviamente dava problemi, ma sorprendentemente pure $do->data = date("Y-m-d H:i:s") non inseriva la data nella query generata (visibile con $do->debugLevel(5)).

Dopo le preliminari imprecazioni sono andato a scartabellare la documentazione scoprendo alcune orrende alchimie, tra le quali DB_DataObject_Cast::date(..)

Finalmente sono riuscito a inserire la data con $do->data = DB_DataObject_Cast::date(date("Y-m-d H:i:s")) ma purtroppo le informazioni riguardanti ora, minuti e secondi venivano ignorate. La documentazione non dice nulla in proposito a “datetime”.

Come al solito la documentazione migliore è leggere i sorgenti (pear/DB/DataObject/Cast.php) dai quali ho scoperto la funzione non documentata DB_DataObject_Cast::dateTime(..) che, tralaltro, se non gli si passa nessun parametro utilizza la data e il time corrente:

$do->data = DB_DataObject_Cast::dateTime();

Tutta questa complessità a che pro? Non era meglio incapsulare questi “dettagli” all’interno del dataobject invece che pasticciare con funzioni esterne? Cioè: il dataobject ha tutte le informazioni per capire che il campo “data” è un “datetime” e, nel caso gli sia passato un array, avrebbe potuto benissimo fare internamente la conversione nella stringa “Y-m-d H:i:s” per la query.

Tema: Rubric. Blog su WordPress.com.

Iscriviti

Get every new post delivered to your Inbox.