从javascript发送到php到mysql的整数回来了

时间:2013-04-18 11:19:21

标签: php javascript mysql variables integer

好的,我现在完全糊涂了。

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

该信息包含一个8到20个字符的唯一编号,用作mysql唯一索引以及所有这些编号,并且编号从1分配给每个唯一编号。

当我发送 1066998880 时,通过检查该行是否存在,然后在其得分中加1来完美运行。

但是当我发送 100005075040249 时,它会以 2147483647 的形式保存到mysql数据库并返回 2146483647的重复

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

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;
};

3 个答案:

答案 0 :(得分:2)

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

您正在插入一个值,该值大于将值截断为最大允许值的范围。这有两种可能的数据类型,

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

,另一个是BIGINT,可以容纳:

签名BIGINT -9223372036854775808 to 9223372036854775807
对于UNSIGNED BIGINT 0 to 18446744073709551615

答案 1 :(得分:1)

2,147,483,647是INT(4字节整数)可以存储在MySQL中的最大值。

将数据类型更改为BIGINT(8字节整数)(最多可存储值9,223,372,036,854,775,807)。

答案 2 :(得分:0)

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

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

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