PHP, PDO SQL server, 返回数据中去掉前导0

标签 php sql-server pdo slim

我正在研究 PHP + Slim Framework。我必须将 MySQL 迁移到 SQL Server。 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 Server 之后,它像这样(示例)向我返回数据,

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

可以看出,从lng中截取了前导0数。我真的不知道如何解决它。有人可以帮忙吗?非常感谢。

**编辑:Lng 数据类型在 SQL Server 中为 DECIMAL(11,8),与 MySQL 相同

更新

有一个解决方法——通过sprintf() 直接将0 添加到数据中。但如果我这样做,问题将无法解决根本原因。但是,我会在没有合适的解决方案的情况下走这条路。

最佳答案

这是一个 known problem在 native 客户端驱动程序中,不幸的是我没有证据表明它已被更正。尝试返回 value as NVARCHAR

关于PHP, PDO SQL server, 返回数据中去掉前导0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169761/

相关文章:

php - 从 PHP 的 while 循环中获取随机数组

php将变量传递给弹出窗口,该窗口的代码在同一页面上

sql-server - 在单个查询 MS SQL 中更新多条记录

php - PDO 持久连接的连接太多?

PHP MYSQL PDO BLOB上传总是空零字节

PHP MYSQL 运行查询两次

php - 代码覆盖率报告错误地指示 Controller 的 100% 覆盖率

phpunit - 连接到服务的虚假 api 响应或真实响应?

sql - 我可以在 plugin/index.js 文件中传递 Cypress.env 吗?

sql-server - 如何避免 Mono ADO.NET 在超时后向请求提供错误结果?