為什麼 MySQL 數字列在 PHP 中以字串形式傳回?

Susan Sarandon
發布: 2024-11-24 11:21:14
原創
513 人瀏覽過

Why are MySQL numeric columns returned as strings in PHP, and how can I ensure they are returned as integers or floats?

如何從MySQL 傳回整數和數字列作為PHP 整數和數字

問題陳述

某些基於PHP 的應用程式可能會遇到以下問題: MySQL 查詢的結果以字串形式傳回,而不是以正確的整數或數字資料類型傳回。儘管將 PDO 屬性 PDO::ATTR_STRINGIFY_FETCHES 設為 false 以防止字串轉換,但還是會發生這種情況。

驅動程式註意事項

需要注意的是,MySQL 驅動程式在決定數位類型是否為數位類型方面發揮著重要作用。以整數或數字形式傳回。某些驅動程式(例如 Linux 上的 MySQL 本機驅動程式)不完全支援此功能。

但是,透過第三方儲存庫可用於 Linux 發行版的 mysqlnd 驅動程式確實支援此功能。支援此功能。確保在 PHP 環境中使用 mysqlnd 驅動程式至關重要。

在Ubuntu 上安裝mysqlnd 驅動程式

要在Ubuntu 上從本機MySQL 驅動程式切換到mysqlnd,請按照以下步驟操作:

  1. >
  2. 卸載本機驅動程式:apt-get remove php5-mysql
  3. 安裝 mysqlnd
  4. 驅動程式: apt-get install php5-mysqlnd
  5. 重新啟動 Apache:service apache2 restart

驗證驅動程式使用

安裝mysqlnd後,透過運行php確認它正在使用 -我。在 pdo_mysql 部分中尋找以下項目:
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
登入後複製

PDO 設定

確保正確設定以下 PDO 屬性:
  • PDO::ATTR_STRINGIF以防止字串
  • PDO::ATTR_EMULATE_PREPARES:設定為 false 以提高效能。

傳回值類型

設定這些設定後,MySQL 會傳回數字型別如下:
  • 浮點類型(FLOAT、 DOUBLE)為 PHP浮點數
  • 整數型別(INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT)以PHP 整數
  • 定點型別(DECIMAL、NUMERIC)以PHP 整數

定點型別(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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板