資料載入中

胡言亂語

PDO PHP - PDOException - Numeric value out of range: 1264 Out of range value for column user_ip at row 1

最近遇到一個問題,一個Mysql的錯誤訊息。

我想要紀錄一個IP資訊,我會先用以下方式擷取用戶端使用者IP
sprintf("%u", ip2long($_SERVER['REMOTE_ADDR']))

然後再把資訊存入到Mysql...

在測試端時我測試一切正常,但在客戶端卻出現500的錯誤訊息且錯誤代碼1264。

原因是客戶端使用的IP是IPV6,長度較長,這點我倒是沒考慮到。

所以當我把資料庫欄位從屬性int改為bigint,又或者把int的長度變更就可以解決。
BIGINT
從-2^63 (-9223372036854775808) 到2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小為8 個字節。
INT
從-2^31 (-2,147,483,648)到2^31 – 1 (2,147,483,647)的整型數據(所有數字)。存儲大小為4個字節。

以上紀錄~

  • Mysql錯誤訊息處理方法
  • 紀錄用戶端IP資訊
  • 客戶端出現500錯誤代碼
  • IPV6長度影響資料庫存儲
  • 修改資料庫欄位屬性解決方案
https://innstory.com/story-PDOPHPPDOExceptionNumericvalueoutofrange1264Outofrangevalueforcolumnuseripatrow1-2566

上一篇
 htaccess與RewriteEngine一起使用時500內部服務器錯誤

下一篇
在PHP中如何將NAN轉換為0 

發表留言

  • 聽起來這個問題還真讓人頭疼,特別是沒想到IPV6的長度會影響到資料庫的設計。調整欄位類型確實是個實用的解決方式。
    2026-05-01 上午 7 點回覆
  • 米蘭達

    遇到這種問題真的讓人煩,特別是IPV6的兼容性。改變資料庫欄位確實是一個有效的解法。希望後面的測試能順利進行,不再出現這樣的錯誤。
    2026-02-20 下午 6 點回覆
  • Jasica

    這個問題聽起來挺常見的,特別是現在IPV6越來越普遍。從int改成bigint聽起來是一個簡單有效的解決方法。很多時候,我們在設計資料庫時,會忽略這些細節。記錄這些經驗真的很重要,尤其是對於未來的開發者來說。希望接下來的測試能更順利,避免再碰到類似的錯誤!
    2025-12-14 下午 4 點回覆

作者簡介

離不開電腦的宅男


推薦閱讀

作者其他相關類別故事

PHPimplode 將陣列轉成字串

PHPimplode 將陣列…

Mark Chang 8 年又 26 天 2.1K

使用implode將陣列轉換成字串; 輸出結果: a,b,c,d,e

在PHP中通過POST發送JSON

在PHP中通過POST發送J…

Mark Chang 6 年又 276 天 1.4K

這回,我遇到需要通過POST請求發送JSON到API。 剛好利用這次的機會紀錄一下: 另外 使用...

讓文字左右對齊

讓文字左右對齊

Mark Chang 6 年又 14 天 1.3K

讓文字左右對齊這類的設計案,通常都會出現在平面設計居多。 網頁上很少會遇到客戶會執著於這方面,但不能...