phpbar.de logo

Mailinglisten-Archive

[dbs] wert nach update doch nicht up-to-date?

[dbs] wert nach update doch nicht up-to-date?

Dario Nuevo php at xbe.ch
Don Sep 4 18:00:25 CEST 2003


hi ralf..

> 
> Dir ist aber schon klar, dass der MySQL-Typ "timestamp"
> kein Timestamp im Unix-Format, wie ihn die PHP-Funktionen
> generieren, darstellt?
> Bzw. in welchem MySQL-Typ speicherst Du den Timestamp?
>

den feldtyp versuch ich zu vermeiden, da ich die timestamps rechnerisch 
einfach als zahlen verwenden will, ausserdem kenn ich die besonderheiten 
vom timestamp-typ nicht..

struktur:
mysql> show columns from foo_sessions;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| autoid | int(11)      |      | PRI | NULL    | auto_increment |
| sid    | varchar(100) |      |     |         |                |
| data   | text         |      |     |         |                |
| addr   | varchar(100) |      |     |         |                |
| opened | int(14)      | YES  |     | NULL    |                |
| expire | int(14)      | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

also ein int.. aber eben, das "opened"-feld ist ja richtig.. die session 
wurde bei "opened" geöffnet und soll ab "expire" geschlossen werden..

inhalt:
mysql> select sid, opened, expire from foo_sessions;
+----------------------------+------------+------------+
| sid                        | opened     | expire     |
+----------------------------+------------+------------+
| 9d3b2a9ff448a8b6b6d5f704b0 | 1062683819 | 2147483647 |
+----------------------------+------------+------------+
1 row in set (0.00 sec)

> Zeig' mal die Datenbank-Definition und das entsprechende
> Codefragment. 
>

das code-fragment hab ich vorher schon geposted mit einer referenz auf 
die klasse.. inserten tut create_session() am anfang, give_lifetime() 
verlängert bei jedem instanzieren und resumen der session die 
expire-dauer.. was brauchst du noch?

> 
> 
> Der MySQL-Typ "timestamp" wird automatisch geaendert. Falls Du
> diesen verwendest, ist dies die Erklaerung. 

schade ;(

> falls nicht, der von Dir genannte Wert sieht sehr nach 
> dem maximalen Wert fuer Integer-Felder aus. 

hmm.. ja da mach ich mir eh sorgen... ich mein jetzt sinds ja noch 10 
zeichen von 14 erlaubten (das meint doch das int(14)?), aber mit jeder 
verstrichenen sekunde kommts dem gau immer näher ;)

> Hast Du versucht, einen Wert, der groesser ist als jener,
> in ein Integer-Feld zu speichern?

hmmm.. eben, im vorherigen  mail hab ich alle sql-queries, die die 
klasse ausführt, gepostet.. dort scheint alles ok zu sein und nicht zu 
lang..

> http://www.mysql.com/doc/en/Column_types.html

die maximallänge sind anscheinend doch 10 zeichen, jedoch 4294967295

> 
> Speichere den Unix-Timestamp in einem (var)char-Feld. 

kann mysql vergleiche auf char-felder machen? kann ich dann immer noch zb
delete from foo_sessions where expire < 22034023
machen? wenn ja, wär das wohl die beste lösung..

> Oder verwende datetime-Felder, fuer die Umwandlung von und
> in andere Formate stellen sowohl MySQL als auch PHP 
> Funktionen zur Verfuegung. 

hm, ja, auch da das problem wegen meinem vergleichs-query (dem delete), 
mit dem ich die records lösche. war ein sehr praktisches und schnelles 
query..

tausend dank
dario


> 
> Beste Gruesse,
>    Ralf



php::bar PHP Wiki   -   Listenarchive