SQLite v2.8(PHP5)中列的元数据

时间:2009-11-08 09:59:34

标签: php sqlite metadata sqlite2

如何使用PHP5(如mysql_fetch_field for MySql)为SQLite v2.8表中的每一列获取元数据/约束(特别是主键和“null allowed”)?

sqlite_fetch_column_types(OO:$db->fetchColumnTypes)只获取列名和数据类型:
http://dk.php.net/manual/en/function.sqlite-fetch-column-types.php

SQLITE_MASTER有信息 - 但不是变量。例如:
SELECT name FROM SQLITE_MASTER;

... SQLITE_MASTER仅输出具有此结构的数组(v2.8):

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

(什么是“rootpage”?)

2 个答案:

答案 0 :(得分:1)

当我使用Zend Framework时,我必须这样做才能为SQLite实现describeTable()方法。 SQLite没有任何方法可以获得有关元数据的非常详细的信息。

我所做的是运行以下SQLite查询:

PRAGMA tableinfo( <tablename> );

请参阅标题为“用于查询数据库架构的Pragma”标题下的http://www.sqlite.org/pragma.html

此查询返回的结果集包含以下列:

  • 列位置(整数)
  • 列名(字符串)
  • 数据类型(字符串)
  • nullable(0)vs. not null(1)
  • 默认值(字符串)
  • 主键(1)

您可以通过下载Zend Framework并查看类Zend_Db_Adapter_Pdo_Sqlite,方法describeTable()来查看PHP代码。您还可以通过framework.zend.com上的代码存储库浏览器在线查看源代码(虽然它经常无效)。

FWIW,这与mysql_fetch_field()不同。该方法返回有关结果集的元数据,这可能与关于表的元数据不同。

答案 1 :(得分:1)

示例代码片段对我有用......说明Bill Karwin的解决方案(这不是试图回答我自己的问题!)

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