Метаданные для столбцов в SQLite v2.8 (PHP5)
Вопрос
Как я могу получить метаданные/ограничения (в частности, первичный ключ и «нулевое значение») для каждого столбца в таблице SQLite v2.8 с использованием PHP5 (например, mysql_fetch_field для MySql)?
sqlite_fetch_column_types
(ОО: $db->fetchColumnTypes
) получает только имя столбца и тип данных:
http://dk.php.net/manual/en/function.sqlite-fetch-column-types.php
SQLITE_MASTER содержит информацию, но не в виде переменной.Пример:
SELECT name FROM SQLITE_MASTER;
...SQLITE_MASTER выводит массив только с такой структурой (v2.8):
[type] => table
[name] => foo
[tbl_name] => foo
[rootpage] => 3
[sql] => CREATE TABLE foo ( id INTEGER PRIMARY KEY, name CHAR(255) )
(А что такое «корневая страница»?)
Решение
Мне пришлось сделать это, чтобы реализовать describeTable()
метод для SQLite, когда я работал над Zend Framework.SQLite не имеет возможности получить очень подробную информацию о метаданных.
Я выполнил следующий запрос SQLite:
PRAGMA tableinfo( <tablename> );
Видеть http://www.sqlite.org/pragma.html, под заголовком «Прагмы для запроса схемы базы данных».
Набор результатов, возвращаемый этим запросом, содержит столбцы для:
- позиция столбца (целое число)
- имя столбца (строка)
- тип данных (строка)
- обнуляемое (0) против.не ноль (1)
- значение по умолчанию (строка)
- первичный ключ (1)
Вы можете просмотреть код PHP, загрузив Zend Framework и просмотрев класс. Zend_Db_Adapter_Pdo_Sqlite
, метод describeTable()
.Вы также можете просмотреть исходный код в Интернете через браузер репозитория кода на framework.zend.com (хотя он часто не работает).
Кстати, это не так mysql_fetch_field()
.Этот метод возвращает метаданные о наборе результатов, которые могут не совпадать с метаданными о таблице.
Другие советы
Пример фрагмента кода, который сработал у меня...чтобы проиллюстрировать решение Билла Карвина (это не попытка ответить на мой собственный вопрос!)
$db = new SQLiteDatabase("db.sqlite2");
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);