【问题标题】:In Postgres, using fetchAll(PDO::FETCH_NUM). How do I get rid of the Double quotes?在 Postgres 中,使用 fetchAll(PDO::FETCH_NUM)。如何摆脱双引号?
【发布时间】:2013-03-23 06:53:29
【问题描述】:

如何获取不带双引号的数据?

让我解释一下: 我正在使用 PostgreSQL 数据库和 PHP PDO 来获取数据。

它返回的数据是:

[["1358991300","70175.47"],["1359077700","70437.59"]...]

但我需要的是:

[[1358991300,70175.47],[1359077700,70437.59]...]

基本上是所有数据,没有双引号。

提前感谢您的帮助!

【问题讨论】:

  • 不是json_encode吗?
  • 请在psql中显示生成此数据的查询、PostgreSQL 版本以及同一查询的输出。
  • 那么查询是:SELECT date_part('epoch',t.time) as unixtime, t.energy_consumption FROM( SELECT time, energy_consumption, ROW_NUMBER() OVER (ORDER BY energy_consumption) AS rownum FROM consumption WHERE id = '001EC60018E22' ) AS t WHERE t.rownum % 1440 = 0;
  • 我基本上需要一个 unix 时间戳和数据(浮点数),但我只选择每 1440 个条目。版本是 PostgreSQL 9.1.2。然后我继续对其进行 json_encode 并将其发送给客户端
  • 就像注释一样,它是 json_encoded 但引号是预先存在的。

标签: php postgresql pdo double-quotes


【解决方案1】:

Postgres PDO 在 PHP 中返回字符串而不是预期的数据类型。

尝试通过以下方式转换类型:

$timestamp = intval($row[0]);
$energy = floatval($row[1]);

更新

PDO 对通过 bindColumn 进行类型转换的支持有限:

PDO + MySQL always returns strings, but what about MsSQL?

http://php.net/manual/en/pdostatement.bindcolumn.php

我不使用 Postgres,所以有人可以确认一下吗?

更新 2

既然你是json_encoding,试试(PHP >= 5.3.3):

json_encode($result, JSON_NUMERIC_CHECK);

自动将数字字符串转换为数字。

【讨论】:

  • 这似乎是真的。有没有更好的方法来获取数值而不是字符串?要处理的数据很可能会达到几百万。
  • 这是大多数 PHP 和 PDO 数据库驱动程序的限制,特别是因为您需要返回一个十进制值。你对需要显式转换的数据做了什么?
  • 它将被绘制或下载。但我想我刚刚找到了解决方案!我可以使用 json_encode($data, JSON_NUMERIC_CHECK) 删除引号。这确实删除了引号,我只是不确定这有多有效。
猜你喜欢
  • 2012-10-28
  • 2018-03-30
  • 2015-12-06
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多