某些基於PHP 的應用程式可能會遇到以下問題: MySQL 查詢的結果以字串形式傳回,而不是以正確的整數或數字資料類型傳回。儘管將 PDO 屬性 PDO::ATTR_STRINGIFY_FETCHES 設為 false 以防止字串轉換,但還是會發生這種情況。
需要注意的是,MySQL 驅動程式在決定數位類型是否為數位類型方面發揮著重要作用。以整數或數字形式傳回。某些驅動程式(例如 Linux 上的 MySQL 本機驅動程式)不完全支援此功能。
但是,透過第三方儲存庫可用於 Linux 發行版的 mysqlnd 驅動程式確實支援此功能。支援此功能。確保在 PHP 環境中使用 mysqlnd 驅動程式至關重要。
要在Ubuntu 上從本機MySQL 驅動程式切換到mysqlnd,請按照以下步驟操作:
PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $PDO 設定確保正確設定以下 PDO 屬性:
定點型別(DECIMAL、NUMERIC)作為字串(帶有數值的bigint)超過64 位元也可能回傳為strings)
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $stmt = $pdo->prepare("SELECT * FROM table"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_OBJ); echo "<pre class="brush:php;toolbar:false">"; print_r($row); echo "";
例如,下列PHP程式碼將輸出預期的資料型態:
object(stdClass)[915] public 'integer_col' => int 1 public 'double_col' => float 1.55 public 'float_col' => float 1.5 public 'decimal_col' => string '1.20' (length=4) public 'bigint_col' => string '18446744073709551615' (length=20)輸出:
以上是為什麼 MySQL 數字列在 PHP 中以字串形式傳回?的詳細內容。更多資訊請關注PHP中文網其他相關文章!