Frage

Wie kann ich Metadaten / Einschränkungen (Primärschlüssel und "null erlaubt" insbesondere) für jede Spalte in einer SQLite v2.8 Tabelle PHP5 mit (wie mysql_fetch_field für MySql)?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) bekommt nur Spaltennamen und Datentyp:
http://dk.php.net/manual/ en / function.sqlite-fetch-column-types.php

SQLITE_MASTER hat die Info - aber nicht als Variable. Beispiel:
SELECT name FROM SQLITE_MASTER;

... SQLITE_MASTER nur ausgibt, ein Array mit dieser Struktur (v2.8):

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

(Und was ist "Rootpage"?)

War es hilfreich?

Lösung

Ich hatte dies zu tun, um eine describeTable() Methode für SQLite zu implementieren, wenn ich auf Zend Framework gearbeitet. SQLite keine Möglichkeit hat, sehr detaillierte Informationen über Metadaten zu erhalten.

Was ich tat, war die folgende SQLite Abfrage auszuführen:

PRAGMA tableinfo( <tablename> );

Siehe http://www.sqlite.org/pragma.html , unter der Überschrift „Pragmas das Datenbankschema abzufragen.“

Die Ergebnismenge von dieser Abfrage zurückgegeben hat Spalten für:

  • Spaltenposition (integer)
  • Spaltenname (string)
  • Datentyp (string)
  • nullable (0) vs. nicht null (1)
  • Standardwert (string)
  • Primärschlüssel (1)

Sie können durch das Herunterladen von Zend Framework und sucht in der Klasse Zend_Db_Adapter_Pdo_Sqlite, Methode describeTable() den PHP-Code anzuzeigen. Sie können auch die Quelle online über den Code-Repository Browser an framework.zend.com sehen (obwohl es häufig nicht funktioniert).

FWIW, dies ist nicht wie mysql_fetch_field(). Diese Methode gibt Metadaten über eine Ergebnismenge, die nicht die gleichen wie Metadaten über eine Tabelle sein kann.

Andere Tipps

Beispiel Code-Schnipsel, die für mich gearbeitet ... Bill Karwin Lösung zu veranschaulichen (es ist kein Versuch, meine eigene Frage zu beantworten!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top