2012-04-05 27 views
0

我问了一个关于bigints的问题,昨天很好地回答了。但是,我一直在观察一些奇怪的行为,并想知道发生了什么。MySql - bigints,php和自动字符串/ int投掷flip-flopping

在我的PHP我有一个数组,我发回到一个JavaScript Web客户端程序使用它。

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

在JS我解压与使用:

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

的问题是,在JS的0索引时间戳被当作字符串,但在索引1时间戳正在被视为一个int。

从教育的角度来看,有谁知道发生了什么事?

回答

1

我相信从PHP数据库返回的值始终是字符串。为了转换您的零指数戳你需要做这样的事情:

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

,将其转换为整数值(基数为10)。

显然,1索引时间戳被直接设置为零,因此它作为int返回的原因。