簡體   English   中英

問題將 pdo 列值轉換為字符串 | PHP

[英]Issue turning pdo column value to string | PHP

本質上,我使用 pdo 運行以下查詢並將結果格式化為 JSON。問題是我需要 column2 在 JSON 中始終顯示為字符串,即使值是數字,也不需要重新格式化其他列值,所以我試圖做一個 for 循環以使用 strvalue 進行轉換。

$stmt = $pdoConnect->prepare('

    SELECT column1, column2, column3 from table1 where column1 = "tree"
');

$stmt->execute([]);


$row = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($row as $rowvalue) {
    strval($rowvalue["column2"]);
}
    
echo json_encode($row);
?>

當前 JSON 響應:

[
  {
    "column1": "tree",
    "column2": 29012,
    "column3": "foggy"
  },
  {
    "column1": "tree",
    "column2": 00930239,
    "column3": "sunny"
  },
   {
    "column1": "tree",
    "column2": 203943,
    "column3": "rainy"
   }
  ]
  

理想 JSON 回復:

[
  {
    "column1": "tree",
    "column2": "29012",
    "column3": "foggy"
  },
  {
    "column1": "tree",
    "column2": "00930239",
    "column3": "sunny"
  },
   {
    "column1": "tree",
    "column2": "203943",
    "column3": "rainy"
   }
  ]
  

你可以試試這個, ATTR_STRINGIFY_FETCHES

$pdoConnect->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

參考: https://www.php.net/manual/en/pdo.setattribute.php

phpfiddle

是的,你已經接近了,但是你在foreach循環中所做的是使用$rowvalue副本,它不會像預期的那樣改變任何原始值。

我不確定您如何將00930239與前導零一起存儲而不是字符串? ...因為假設數據庫級別的 INT 字段類型通常會保存為930239

無論如何,作為第一個和最后一個 JSON 值的示例,更改:

foreach ($row as $rowvalue) {
    strval($rowvalue["column2"]);
}

...到:

foreach ($row as &$rowvalue) { // use & as reference with $rowvalue to save the modification
    $rowvalue['column2'] = strval($rowvalue['column2']);
}

...這將給出:

[
    {
        "column1": "tree",
        "column2": "29012",
        "column3": "foggy"
    },
    {
        "column1": "tree",
        "column2": "203943",
        "column3": "rainy"
    }
]

例如php 小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM