从javascript到php再到mysql发送的整数返回的结果不同


Integer sent from javascript to php to mysql comes back different

好吧,我现在完全困惑了。

我有一个javascript应用程序,它将一组信息发送到php脚本,然后将其保存到mysql数据库。

该信息包含一个介于8到20个字符之间的唯一数字,该数字用作mysql唯一索引等,并且每个唯一数字都有一个从1递增的数字。

当我发送1066998880时,通过检查行是否存在,然后在其分数上加1,它可以完美地工作。

但当我发送100005075040249时,它会保存到mysql数据库中,作为21474833647,并返回247483647的重复。

不确定我做错了什么。但这是我的代码:

JAVASCRIPT

$.ajax({ url: 'URL',
     data: { Unique_ID: Unique_ID, first: first, last: last, email: email},
     type: 'post',
     success: function(output) { 'functions'};

PHP

$Unique_ID = $_POST["Unique_ID"];
$first = $_POST["first"];
$last = $_POST["last"];
$email = $_POST["email"];
$count = 1;
// Connect to server and select database.
$connection = mysql_connect("$host", "$username", "$password") or die(mysql_error()); 
$sql = "SELECT * FROM `comfort_lavender`.`Players` WHERE Unique_ID = '$Unique_ID'";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0){
    //found
    mysql_query("UPDATE `comfort_lavender`.`Players` SET `count` = `count`+1 WHERE     Unique_ID= '$Unique_ID'");
    $score = mysql_query("SELECT count FROM `comfort_lavender`.`Players` WHERE `Unique_ID` = '$Unique_ID'");
    $got = mysql_fetch_array( $score ); 
    echo $got['count'];
}else{
    //not found
    mysql_query("INSERT INTO `comfort_lavender`.`Players` (`Unique_ID`, `first`, `last`, `email`, `count`) VALUES ('$Unique_ID', '$first', '$last', '$email', '1');") or die(mysql_error());
    echo 1;
};

最简单的答案是列的数据类型为SIGNED INT,最大值为2147483647

您插入的值大于该值被截断为其允许的最大值的范围。有两种可能的数据类型,

一个是VARCHAR(18),它将您的数据类型更改为字符串。

另一种是CCD_ 4,它可以容纳高达:

对于签名BIGINT -9223372036854775808 to 9223372036854775807
用于未签名BIGINT 0 to 18446744073709551615

  • 整数类型(精确值(-Integer、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT

2147483647是INT(4字节整数(可以存储在MySQL中的最大值。

将数据类型更改为BIGINT(8字节整数((可以存储高达9223372036854775807的值(。

根据数据库中使用的数据类型和服务器的32/64位版本,整数有特定的限制。

一个解决方法可能是在PHP中使用字符串,在SQL中使用BIGINT。

http://php.net/manual/de/language.types.integer.php