【问题标题】:Integer sent from javascript to php to mysql comes back different从 javascript 发送到 php 到 mysql 的整数返回不同
【发布时间】:2025-11-25 09:55:02
【问题描述】:

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

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

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

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

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

不知道我做错了什么。但这是我的代码:

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

【问题讨论】:

    标签: php javascript mysql variables integer


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】: