簡體   English   中英

PHP, PDO SQL 服務器,返回數據中去掉前導0號

[英]PHP, PDO SQL server, the leading 0 number is cut from the return data

我正在研究 PHP + Slim Framework。 我必須將 MySQL 遷移到 SQL 服務器。 SELECT語句返回結果有問題。 這是我的示例數據,

╔════╦═══════╦════════════╦════════════╦═══════════════════════╗
║ id ║item_id║    lat     ║     lng    ║       timestamp       ║
╠════╬═══════╬════════════╬════════════╬═══════════════════════╣
║  1 ║  1    ║51.42743450 ║-0.72776696 ║2017-07-05 09:54:49.000║
║  2 ║  1    ║51.59665507 ║-0.72777098 ║2017-07-05 11:54:49.000║
║  3 ║  2    ║51.59664690 ║-0.67272032 ║2016-08-10 10:11:49.000║
║  4 ║  2    ║51.59664874 ║-0.67270288 ║2016-08-10 11:05:49.000║
║  5 ║  2    ║51.59665167 ║-0.67271587 ║2016-08-10 10:08:49.000║
╚════╩═══════╩════════════╩════════════╩═══════════════════════╝

這是代碼,

public function test(Request  $request, Response  $response, $args)
{
  $query = 'SELECT item_id, lat, lng FROM mySchema.record WHERE item_id = 1';
  $sth = $this->db->prepare($query);
  $sth->execute();
  $rows = $sth->fetchAll();
  $data = array('data' => $rows);
  return $response->withJson($data);
}  

之前在MySQL中,數據是這樣正確返回的(例子),

"data" : [
    {
        "item_id" : "1",
        "lat" : "51.42743450",
        "lng" : "-0.72776696"
    }
]

但是在使用 SQL 服務器后,它會像這樣(示例)向我返回數據,

 "data" : [
    {
        "item_id" : "1",
        "lat" : "51.42743450",
        "lng" : "-.72776696"
    }
]

可以看出,前導 0 數字是從 lng 中刪除的 我真的不知道如何解決它。 有人可以幫忙嗎? 非常感謝。

**編輯:SQL 服務器中的 Lng 數據類型為 DECIMAL(11,8),與 MySQL 相同

更新

有一個解決方法 - 通過sprintf()直接將0添加到數據中。 但是如果我這樣go,問題將無法解決根本原因。 但是,我會這樣 go 在沒有合適的解決方案的情況下。

這是本機客戶端驅動程序中的已知問題 ,不幸的是我沒有證據表明它已被糾正過。 嘗試將返回為NVARCHAR

也許我來晚了一點,但這已經通過參數化解決了。 這是文檔

簡短回答:將PDO::SQLSRV_ATTR_FORMAT_DECIMALS參數設置為true

暫無
暫無

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

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