SQLite v2.8 sütunlar (PHP5) için Metadata

2 Cevap php

Nasıl meta / kısıtlamaları (birincil anahtar ve özellikle "null izin") (MySQL için mysql_fetch_field gibi) PHP5 kullanarak bir SQLite v2.8 tablodaki her sütun için alabilirim?

sqlite_fetch_column_types (OO: $db->fetchColumnTypes) only gets column name and datatype:
http://dk.php.net/manual/en/function.sqlite-fetch-column-types.php

SQLITE_MASTER has the info - but not as a variable. Example:
SELECT name FROM SQLITE_MASTER;

Sqlite_master ... Sadece bu yapının (v2.8) ile bir dizi verir:

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

(Ve "rootpage" nedir?)

2 Cevap

Ben Zend Framework üzerinde çalıştığı SQLite için bir describeTable() yöntemi uygulamak için bunu yapmak zorunda. SQLite meta hakkında çok detaylı bilgi almak için herhangi bir yol yoktur.

Ne yaptım aşağıdaki SQLite sorguyu çalıştırmak oldu:

PRAGMA tableinfo( <tablename> );

Başlığı altında, http://www.sqlite.org/pragma.html Bkz: "veritabanı şemasını sorgulamak için pragmas."

Bu sorgudan döndürülen sonuç kümesi için sütun vardır:

  • sütun konumu (tamsayı)
  • sütun adı (string)
  • veri tipi (string)
  • null (0) vs değil boş (1)
  • Varsayılan değer (string)
  • birincil anahtar (1)

Sen Zend_Db_Adapter_Pdo_Sqlite Zend Framework indirmek ve sınıf bakarak PHP kodu görebilirsiniz, yöntem describeTable(). (Sık sık çalışmıyor olmasına rağmen) Ayrıca framework.zend.com de kod deposu tarayıcısı üzerinden online kaynağını görebilirsiniz.

FWIW, bu gibi değil mysql_fetch_field(). Bu yöntem bir tablo hakkında meta veri olarak aynı şey olmayabilir sonuç kümesi, hakkında meta döndürür.

(Bu benim kendi soruyu yanıtlamak için bir girişim değil!) Bill Karwin çözümünü göstermek için ... benim için çalıştı örnek kod parçacığını

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);