Pregunta

¿Cómo puedo obtener / limitaciones (clave principal y "nulo permitido" en particular) de metadatos para cada columna en una tabla SQLite v2.8 usando PHP5 (como mysql_fetch_field para MySQL)?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) sólo se pone nombre de columna y tipo de datos:
http://dk.php.net/manual/ es / function.sqlite-fetch-columna-types.php

sqlite_master tiene la información - pero no como una variable. Ejemplo:
SELECT name FROM SQLITE_MASTER;

... sqlite_master solamente emite una matriz con esta estructura (v2.8):

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

(Y lo que es "rootpage"?)

¿Fue útil?

Solución

he tenido que hacer esto para poner en práctica un método para SQLite describeTable() cuando trabajé en Zend Framework. SQLite no tiene ninguna manera de obtener información muy detallada acerca de los metadatos.

Lo que hice fue correr la siguiente consulta SQLite:

PRAGMA tableinfo( <tablename> );

http://www.sqlite.org/pragma.html , bajo la título "pragmas para consultar el esquema de base de datos."

El conjunto de resultados devuelto por esta consulta tiene columnas para:

  • posición de la columna (integer)
  • nombre de la columna (cadena)
  • tipo de datos (cadena)
  • anulable (0) vs. no nulo (1)
  • valor predeterminado (cadena)
  • clave principal (1)

Puede ver el código de PHP mediante la descarga de Zend Framework y mirando en Zend_Db_Adapter_Pdo_Sqlite clase, método describeTable(). También puede ver la fuente en línea a través del navegador de repositorios de código en framework.zend.com (aunque con frecuencia no se trabaja).

Fwiw, esto no es como mysql_fetch_field(). Ese método devuelve metadatos acerca de un conjunto de resultados, que puede no ser el mismo que los metadatos sobre una mesa.

Otros consejos

Ejemplo fragmento de código que funcionó para mí ... para ilustrar solución de Bill Karwin (que no es un intento de responder a mi propia pregunta!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top