Intereting Posts
Добавление тегов в продукты Magento Как применить несколько фильтров в группе маршрутов Laravel 4? Переадресация symfony2 в конструкторе PHP не может найти драйвер MongoDB перенаправлять на новую страницу после отправки и проверки формы с помощью php Как изменить пустую строку на нуль, используя Laravel 5.1? Как настроить Zend 2 на сервере хостинга? Как удалить каждый третий элемент в php-массиве до тех пор, пока останется только один элемент и не напечатает этот элемент? Импорт JSON в Mysql Как я могу реализовать WS-Security 1.0 в PHP5 с использованием сертификатов? PHP, возвращающий входные переменные Проверка формы PHP (не знаю, как разделить ее на две разные страницы) Загрузить индикатор выполнения с использованием сеанса в PHP 5.4 с помощью codeigniter Показать ближайший результат до текущей даты и времени (MySQL и PHP) Загрузите видео в канал YouTube через скрипт PHP

Результат pg_query содержит строки вместо целых чисел, числовые

Когда я получаю данные из базы данных postgresql с pg_query, pg_fetch_assoc все числовые поля возвращаются в виде строк. Есть ли способ обойти это, или я должен прибегать к тому, чтобы придать каждому полю то, что мне нужно?

Это то, что делает PHP. Из руководства :

Каждое значение в массиве представляется в виде строки.

Может быть, немного не по теме – дайте мне знать, и я откажусь от ответа – но все же это одна из причин, по которым вышел проект Pomm: поскольку по умолчанию логические значения возвращаются как строки 't' и 'f' ( правда и ложь).

Это очень неудобно и не позволяет разработчикам использовать сложные и полезные структуры, такие как массивы, диапазоны, геометрические типы и т. Д.

Пакет Pomm's Foundation использует функцию pg_field_type для запуска преобразователя по результатам и параметрам:

select array[1, 2, 3]::int4[] as some_ints, now() as a_date, point(1,2) as a_point, true as a_bool ; 

Выполнение этого запроса с использованием PDO или собственной библиотеки Postgres PHP возвращает массив строк, например:

 some_ints │ a_date │ a_point │ a_bool {1,2,3} │ 2015-07-31 07:35:36.143182+00 │ (1,2) │ t 

Выполнение этого запроса с использованием Pomm's Foundation возвращает итератор с единственным результатом массива:

 [ "some_ints" => [ 1, 2, 3 ], "a_date" => <DateTime> { date: "2015-07-31 07:45:21.438447", timezone_type: 1, timezone: "+00:00" }, "a_point" => <PommProject\Foundation\Converter\Type\Point> { x: 1.0, y: 2.0 }, "a_bool" => true ] 

Система конвертера также работает для параметров запроса:

 $sql = <<<SQL select 2 = ANY($*::int4[]) as contain_two, now() > $*::timestamptz as is_past, circle(point(0,0), 5) @> $*::point as is_in_circle ; SQL; $res = $pomm ->getDefaultSession() ->getQueryManager() ->query($sql, [ [1,2,3], new \DateTime('yesterday'), new \PommProject\Foundation\Converter\Type\Point('(3,3)') ]) ->current() ; 

Это возвращает:

 [ "contain_two" => true, "is_past" => true, "is_in_circle" => true ] 

Можно даже создать собственные преобразователи и объявить, как можно преобразовать составные (строковые) типы. Более подробная статья об этом здесь .