前言
因為本地接口開發時,php 使用 mysqli 擴充,發現測試環境沒有使用 mysqli,是以更換成了 pdo,随後對接口進行測試的時候發現,傳回值的整型字段資料全都變為字元型。
查錯
因為更改前沒有發生這個問題,是以大緻判斷是 pdo 做了某些處理導緻的這個問題。
其中,發現
PDO::ATTR_STRINGIFY_FETCHES(提取的時候将數值轉換為字元串)
PDO::ATTR_EMULATE_PREPARES(啟用或禁用預處理語句的模拟)
這兩個預定義之間會有一些影響,我們來做個實驗驗證下
實驗
$pdo = new PDO($dsn, $user, $pass, $options);
/* 實驗1,結果 int 不轉為 string */
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
/* 實驗2,結果 int 轉為 string */
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
/* 實驗3,結果 int 轉為 string */
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
/* 實驗4,結果 int 轉為 string */
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);