DB_Pgsql_Type — это фреймворк для преобразования сложных типов PostgreSQL 8.3+ в их аналоги на PHP и обратно. С ее помощью вы можете работать с полями сложного типа (к примеру, двумерным массивом композитных типов) так же просто, как с привычными массивами PHP.
Поддерживаются следующие типы данных и любые их вложенные комбинации:
Однако в PHP-скрипте при попытке получить значение из такого столбца:
вы увидите лишь строковое представление этих данных, нечто вроде:
DB_Pgsql_Type как раз и позволяет преобразовать выражения вида {{one,two},{«three \»3\"",four}} в двумерный массив PHP (с учетом особенностей квотинга спец-последовательностей: кавычек, апострофов, пустых строк, NULL и т. д.) Или обратно, если нужно записать двумерный массив в БД.
Исходники библиотеки и документацию можно посмотреть тут:
dklab.ru/lib/DB_Pgsql_Type
Здесь же в качестве простейшего примера приведем код для разбора двумерного массива строк из листинга выше:
Можно обратно построить строку по массиву PHP для вставки в БД:
Скачать библиотеку и посмотреть другие примеры: работа с массивами, композитными типами и ROWTYPE, hstore и т.д.
Поддерживаются следующие типы данных и любые их вложенные комбинации:
- Массивы элементов произвольного типа (в том числе многомерные).
- Композитные типы и ROWTYPE (в частности, сами содержащие композитные поля или поля-массивы).
- Hstore (в том числе содержащие сложные элементы).
- Прочие типы: TIMESTAMP (преобразуется в Unix time), DATE, TIME, BOOLEAN и т. д.
CREATE TABLE something( id INTEGER, matrix TEXT[][] ); INSERT INTO something(id, matrix) VALUES( 1, ARRAY[ARRAY['one','two'], ARRAY['three "3"','four']] );
Однако в PHP-скрипте при попытке получить значение из такого столбца:
$rs = $pdo->query("SELECT matrix FROM something WHERE id=1"); echo $rs->fetchColumn();
вы увидите лишь строковое представление этих данных, нечто вроде:
{{one,two},{"three \"3\"",four}}
DB_Pgsql_Type как раз и позволяет преобразовать выражения вида {{one,two},{«three \»3\"",four}} в двумерный массив PHP (с учетом особенностей квотинга спец-последовательностей: кавычек, апострофов, пустых строк, NULL и т. д.) Или обратно, если нужно записать двумерный массив в БД.
Исходники библиотеки и документацию можно посмотреть тут:
dklab.ru/lib/DB_Pgsql_Type
Здесь же в качестве простейшего примера приведем код для разбора двумерного массива строк из листинга выше:
// Создаем парсер для типа "массив массивов строк". $parser = new DB_Pgsql_Type_Array( new DB_Pgsql_Type_Array( new DB_Pgsql_Type_String() ) ); // Вернет array(array("one", "two"), array('three "3"', "four")) $array = $parser->input('$Blk{'one,two},{"three \"3\"",four'}');
Можно обратно построить строку по массиву PHP для вставки в БД:
echo $parser->output($array);
Скачать библиотеку и посмотреть другие примеры: работа с массивами, композитными типами и ROWTYPE, hstore и т.д.