Вопрос

Как я могу получить метаданные/ограничения (в частности, первичный ключ и «нулевое значение») для каждого столбца в таблице 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top