Pergunta

Como posso obter metadados / restrições (chave primária e "nulo permitido" em particular) para cada coluna em uma tabela SQLite v2.8 usando PHP5 (como mysql_fetch_field para MySql)?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) só recebe nome da coluna e tipo de dados:
http://dk.php.net/manual/ en / function.sqlite-busca-column-types.php

sqlite_master tem a info - mas não como uma variável. Exemplo:
SELECT name FROM SQLITE_MASTER;

... sqlite_master somente mostra uma matriz com essa estrutura (v2.8):

[type] => table
[name] => foo
[tbl_name] => foo
[rootpage] => 3
[sql] => CREATE TABLE foo ( id INTEGER PRIMARY KEY, name CHAR(255) )

(E o que é "rootpage"?)

Foi útil?

Solução

Eu tive que fazer isso para implementar um método describeTable() para SQLite quando eu trabalhava no Zend Framework. SQLite não tem qualquer maneira de obter informações muito detalhadas sobre metadados.

O que fiz foi para executar a seguinte consulta SQLite:

PRAGMA tableinfo( <tablename> );

Consulte http://www.sqlite.org/pragma.html , sob a título "Pragmas para consultar o esquema de banco de dados."

O conjunto de resultados retornado desta consulta tem colunas para:

  • posição da coluna (número inteiro)
  • nome da coluna (string)
  • tipo de dados (string)
  • nulo (0) x não-nula (1)
  • valor padrão (string)
  • chave primária (1)

Você pode ver o código PHP baixando Zend Framework e olhando em Zend_Db_Adapter_Pdo_Sqlite classe, método describeTable(). Você também pode visualizar a fonte on-line via browser repositório do código na framework.zend.com (embora muitas vezes não está funcionando).

FWIW, este não é como mysql_fetch_field(). Esse método retorna metadados sobre um conjunto de resultados, que pode não ser a mesma coisa que metadados sobre uma tabela.

Outras dicas

Exemplo trecho de código que funcionou para mim ... para ilustrar solução de Bill Karwin (não é uma tentativa de responder a minha pergunta!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top