В Postgres с помощью fetchAll(PDO::FETCH_NUM). Как избавиться от двойных кавычек?

Как получить данные без двойных кавычек?

Позвольте мне объяснить: я использую базу данных PostgreSQL и PHP PDO для получения данных.

Данные, которые он возвращает:

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

Но мне нужно:

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

в основном все данные, без двойных кавычек.

Спасибо заранее за любую помощь!


person Philipp Werminghausen    schedule 02.04.2013    source источник
comment
Разве это не json_encode?   -  person hjpotter92    schedule 02.04.2013
comment
Пожалуйста, покажите запрос, производящий эти данные, версию PostgreSQL и результат того же запроса в psql.   -  person Craig Ringer    schedule 02.04.2013
comment
хорошо, запрос: ВЫБЕРИТЕ date_part ('эпоха', t.time) как unixtime, t.energy_consumption FROM (ВЫБЕРИТЕ время, energy_consumment, ROW_NUMBER() OVER (ORDER BY energy_consumption) AS rownum FROM потребление WHERE id = '001EC60018E22') AS t ГДЕ t.rownum % 1440 = 0;   -  person Philipp Werminghausen    schedule 02.04.2013
comment
В основном мне нужна временная метка unix и данные (с плавающей запятой), но я выбираю только каждую 1440-ю запись. И версия PostgreSQL 9.1.2. Затем я перехожу к json_encode и отправляю клиенту.   -  person Philipp Werminghausen    schedule 02.04.2013
comment
Как примечание, это json_encoded, но кавычки существуют заранее.   -  person Philipp Werminghausen    schedule 02.04.2013


Ответы (1)


Postgres PDO возвращает строки в PHP вместо ожидаемых типов данных.

Попробуйте преобразовать типы через:

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

ОБНОВЛЕНИЕ

PDO имеет ограниченную поддержку преобразования типов через bindColumn:

PDO + MySQL всегда возвращает строки, но как насчет MsSQL?

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

Я не использую Postgres, так что кто-нибудь может подтвердить?

ОБНОВЛЕНИЕ 2

Поскольку вы используете json_encoding, попробуйте (PHP >= 5.3.3):

json_encode($result, JSON_NUMERIC_CHECK);

Для автоматического преобразования числовых строк в числа.

person methai    schedule 02.04.2013
comment
Это кажется правдой. Нет ли лучшего способа получить числовые значения вместо строк? Объем обрабатываемых данных, скорее всего, достигнет пары миллионов. - person Philipp Werminghausen; 02.04.2013
comment
Это ограничение большинства драйверов db для PHP и PDO, тем более что вам нужно возвращать десятичное значение. Что вы делаете с данными, которые требуют явного преобразования? - person methai; 02.04.2013
comment
Это будет графически или загружено. Но я думаю, что я только что нашел решение! Я могу удалить кавычки, используя json_encode($data, JSON_NUMERIC_CHECK). Это удаляет кавычки, я просто не уверен, насколько это эффективно. - person Philipp Werminghausen; 02.04.2013