2

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

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”?)

4

2 回答 2

1

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

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
于 2009-11-14T09:57:21.667 回答
1

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

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

PRAGMA tableinfo( <tablename> );

请参阅http://www.sqlite.org/pragma.html,标题为“查询数据库模式的 Pragma”。

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

  • 列位置(整数)
  • 列名(字符串)
  • 数据类型(字符串)
  • 可空 (0) 与非空 (1)
  • 默认值(字符串)
  • 主键 (1)

您可以通过下载 Zend Framework 并查看类Zend_Db_Adapter_Pdo_Sqlite、方法来查看 PHP 代码describeTable()。您还可以通过 framework.zend.com 上的代码存储库浏览器在线查看源代码(尽管它经常不工作)。

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

于 2009-11-08T19:14:49.673 回答