2012-04-05 4 views
0

Ich habe gestern eine Frage über bigints gestellt, die freundlicherweise beantwortet wurde. Ich habe jedoch ein seltsames Verhalten beobachtet und würde gerne verstehen, was vor sich geht.MySql - bigints, php und auto string/int casting flip-flopping

In meinem PHP habe ich ein Array, das ich zurück zu einem Javascript-Web-Client-Programm senden, die es verwendet.

in der PHP-

sendBack = null; 
    sendBack[0]['TimeStamp'] = $Time; // A bigint got from a mysql table milliseconds from 1970 
    sendBack[0]['Text'] = $Message; // A varchar message got back from mysql 
    // I am guessing at this point you have worked out this is a text-chatroom thing going on 
    sendBack[1]['TimeStamp'] = 0; // A zero indicates an admin issue - note its an int but a small one 
    sendBack[1]['Text'] = $MessageAdmin; 

    // And I pack it up to send back 
    echo json_encode($sendBack); 

In den js ich es auspacken mit verwenden:

var json = eval('(' + data + ')'); 

Das Problem ist, wird der Index 0 Timestamp in den js als String behandelt wird, aber die index 1 Zeitstempel wird als int behandelt.

Aus pädagogischer Sicht weiß jemand, was vor sich geht?

Antwort

1

Ich glaube, Werte, die aus einer Datenbank mit PHP zurückgegeben werden, sind immer Zeichenfolgen.

sendBack[0]['TimeStamp'] = parseInt($Time, 10); 

, die es auf einen ganzzahligen Wert konvertieren (Basis 10): Um Ihren Null-Index Zeitstempel zu umwandeln würde man so etwas tun müssen.

Offensichtlich wird der 1-Index-Zeitstempel als Null gesetzt, daher der Grund, warum er als int zurückgegeben wird.