Domanda

Come posso ottenere i metadati / vincoli (chiave primaria e "null permesso" in particolare) per ogni colonna in una tabella SQLite v2.8 usando PHP5 (come mysql_fetch_field per MySQL)?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) ottiene solo nome della colonna e il tipo di dati:
http://dk.php.net/manual/ it / function.sqlite-fetch-colonna-types.php

sqlite_master ha informazioni - ma non come una variabile. Esempio:
SELECT name FROM SQLITE_MASTER;

... sqlite_master emette solamente un array con questa struttura (v2.8):

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

(E ciò che è "rootpage"?)

È stato utile?

Soluzione

ho dovuto fare questo per implementare un metodo describeTable() per SQLite quando ho lavorato su Zend Framework. SQLite non ha alcun modo per ottenere informazioni molto dettagliate sui metadati.

Quello che ho fatto è stato quello di eseguire la seguente query SQLite:

PRAGMA tableinfo( <tablename> );

http://www.sqlite.org/pragma.html , sotto la voce "Pragma per interrogare lo schema del database".

Il set di risultati restituito da questa query ha le colonne per:

  • posizione della colonna (intero)
  • nome della colonna (stringa)
  • tipo di dati (stringa)
  • Null (0) vs. non nullo (1)
  • valore di default (stringa)
  • chiave primaria (1)

È possibile visualizzare il codice PHP scaricando Zend Framework e alla ricerca in classe Zend_Db_Adapter_Pdo_Sqlite, metodo describeTable(). È inoltre possibile visualizzare la fonte online tramite il codice del browser repository a framework.zend.com (anche se è spesso non funziona).

FWIW, questo non è come mysql_fetch_field(). Questo metodo restituisce metadati relativi a un set di risultati, che non può essere la stessa cosa di metadati relativi a un tavolo.

Altri suggerimenti

Esempio di codice frammento che ha funzionato per me ... per illustrare la soluzione di Bill Karwin (non è un tentativo di rispondere alla mia domanda!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top