[英]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);
是的,你已經接近了,但是你在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.