-2

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

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

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

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

但是当我发送100005075040249它作为2147483647保存到 mysql 数据库并返回Duplicate of 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;
};
4

3 回答 3

2

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

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

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

另一个是BIGINT可以承受的:

对于 SIGNED BIGINT-9223372036854775808 to 9223372036854775807
对于 UNSIGNED BIGINT0 to 18446744073709551615

于 2013-04-18T11:21:17.403 回答
1

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

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

于 2013-04-18T11:21:37.627 回答
0

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

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

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

于 2013-04-18T11:21:26.720 回答