首页 文章

mysql数据库插入正在将所有ID更改为4294967295

提问于
浏览
4

我的数据库正在发生一些非常奇怪的事情 . 我使用PHP将数据插入到我的数据库中,我在过去的两年里一直这样做,没有任何问题 . 当客户在我的网站上进行付款时,我会将该交易中的所有数据存储在我的数据库中 . 每个交易都有一个唯一的“transaction_id” . 当我将支付信息插入数据库时,除了“transaction_id”之外,所有信息都被正确插入 . 所有交易都被赋予“transaction_id”“4294967295” . 所以我做了一些测试 . 这是我做的:

1)我在屏幕上回显了“transaction_id”,看看会说些什么 . 结果是正在回应的“transaction_id”是正确的 . 这不是重复的“4294967295” . 但是,当我查看我的数据库时,它显示“4294967295” .

2)这次我决定将查询回显到我的网络浏览器 . 查询是正确的 . 在查询中,CORRECT“transaction_id”在查询中 . 但是,当我查看我的数据库时,它显示“4294967295” .

我有3个不同的页面,客户可以付款 . 所有3页在2012年4月6日开始这样做 . 这些页面都没有被修改过 . 我在2年多的时间里没有对这些页面进行修改 . 任何帮助是极大的赞赏!

$query = "INSERT INTO payments (customer_id, transaction_id, invoice_number, authorization_code, subscription, subscription_id, avs_result, cvv_result, amount, full_tuition, payment_date, ip_address) VALUES ({$_SESSION['customer_id']}, {$_SESSION['transaction_id']}, {$_SESSION['invoice_number']}, '{$_SESSION['authorization_code']}', '{$_SESSION['subscription']}', {$_SESSION['subscription_id']}, '{$_SESSION['avs_result']}', '{$_SESSION['cvv_result']}', {$_SESSION['amount']}, {$_SESSION['full_tuition']}, '{$_SESSION['payment_date']}', '{$_SESSION['ip_address']}')" ;
$result = mysqli_query($dbc, $query) OR die ('<p>There was an error with the INSERT payments query.: ' . mysqli_error($dbc) . '
Query:' . $query . '</p>') ; echo '<p>Transaction ' . $_SESSION['transaction_id'] . ' has been <font color="green">APPROVED</font> by the system.</p>' ; echo '

' ; echo '<p>Below is a summary:</p>' ; echo '<p>Transaction ID: ' . $_SESSION['transaction_id'] . '
Payment Method: XXXX
Amount: $' . $amount . '
Customer Name: ' . $_SESSION['first_name'] . ' ' . $_SESSION['last_name'] . '
</p>' ; echo "<p>Note: Please do NOT click the browser's Back button to enter a new transaction.</p>" ; echo $query ;

5 回答

  • 4

    您的号码大于DB可以处理的字段...

    4294967295是32位可容纳的最大数字,您的事务ID现在大于数据库可容纳的数字字段 .

  • 0

    优秀的工作调查问题,并在您的问题中报告结果!

    4294967295是mysql可以容纳的最大INT,因此高于该值的事务ID将存储为4294967295.要解决此问题,可以将列类型更改为BIGINT: modify column transaction_id bigint

    这应该在保留所有数据的同时转换列类型,但最好先备份数据库以防万一!

  • 9

    4294967295方便地为2 ^ 32-1 - 32位无符号整数的最大值 . 它看起来像你给它的任何transaction_id太大,所以它溢出,MySQL在这种情况下的行为是将其设置为最大值 .

    此外,如果您使用的是MySQLi,则应考虑使用预准备语句 . 我不确定你的会话变量的 Value 是多少,但我怀疑它们没有转义,所以它们要么被转义,要么使用预备语句 .

  • 0

    transaction_id 的数据类型更改为 BIGINT

  • 1

    另一个选择是查看表的 auto increment value . 在我的情况下,它是4294967295:/

相关问题