數據庫返回的整型數據被偷換成了字符串類型

在實現一個多級菜單功能時,發現 Laravel 從 MySQL 獲取的整型數據被轉換成了 string 類型, 導致使用 collection filter 無法得到對應的數據。但是並不是在所有機器上都能出現,只有在服務器上纔會

開發機 (Mac / Ubuntu 16.04)

[2016-07-07 08:17:43] local.INFO: [{"id":1,"level":1}]

生產環境 (Ubuntu 12.04)

[2016-07-07 09:06:07] local.INFO: [{"id":1,"level":"1"}]

可以看到,代表菜單層級的 level 字段,在生產環境中變成了字符串。

確認了表結構沒有問題,說明問題出在了數據被取出來的過程中。於是 Google 了一下,發現問題出在了 PHP 的 MySQL 驅動上

  • MySQL integer field is returned as string in PHP

  • laravel eloquent integers returned as strings in mssql

而在 PHP 5.3 版本之後則不會出現該問題,於是更新 PHP 的 MySQL 驅動

sudo apt-get update
sudo apt-get install php5-mysqlnd

無需重啓 Nginx, 再次測試,發現一切正常,說明問題解決

[2016-07-07 09:22:38] local.INFO: [{"id":1,"level":1}]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章