天天看點

[php] pdo 查詢 mysql 傳回值 int 轉 string 類型的問題

前言

因為本地接口開發時,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);