Question

Comment puis-je obtenir des métadonnées / contraintes (clé primaire et « nul permis » en particulier) pour chaque colonne dans une table v2.8 SQLite en utilisant PHP5 (comme mysql_fetch_field pour MySql)?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) obtient seulement le nom de la colonne et le type de données:
http://dk.php.net/manual/ fr / function.sqlite-fetch-colonne-types.php

sqlite_master a l'info - mais pas comme une variable. Exemple:
SELECT name FROM SQLITE_MASTER;

... sqlite_master délivre seulement un tableau avec cette structure (v2.8):

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

(Et ce qui est "rootpage"?)

Était-ce utile?

La solution

Je devais le faire pour mettre en œuvre une méthode de describeTable() pour SQLite quand je travaillais sur Zend Framework. SQLite ne dispose d'aucun moyen d'obtenir des informations très détaillées sur les métadonnées.

Ce que je l'ai été pour exécuter la requête SQLite suivante:

PRAGMA tableinfo( <tablename> );

Voir http://www.sqlite.org/pragma.html , sous la rubrique « pragma à interroger le schéma de base de données. »

Le jeu de résultat renvoyé de cette requête comporte des colonnes pour:

  • position de colonne (nombre entier)
  • nom de la colonne (chaîne)
  • type de données (string)
  • nullable (0) vs. non nulle (1)
  • valeur par défaut (string)
  • clé primaire (1)

Vous pouvez afficher le code PHP en téléchargeant Zend Framework et la recherche en classe Zend_Db_Adapter_Pdo_Sqlite, méthode describeTable(). Vous pouvez également consulter la source en ligne via le navigateur référentiel de code à framework.zend.com (bien qu'il soit souvent ne fonctionne pas).

FWIW, c'est pas comme mysql_fetch_field(). Cette méthode renvoie les métadonnées d'un jeu de résultats, qui ne peut être la même chose que des métadonnées sur une table.

Autres conseils

extrait de code exemple qui a fonctionné pour moi ... pour illustrer la solution de Bill Karwin (ce n'est pas tenter de répondre à ma question!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top