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

发布于 2024-08-10 09:34:16 字数 703 浏览 7 评论 0原文

如何使用 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”?)

How can I get metadata / constraints (primary key and "null allowed" in particular) for each column in a SQLite v2.8 table using PHP5 (like mysql_fetch_field for MySql)?

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 only outputs an array with this structure (v2.8):

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

(And what is "rootpage"?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜吻♂芭芘 2024-08-17 09:34:16

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

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

PRAGMA tableinfo( <tablename> );

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

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

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

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

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

I had to do this to implement a describeTable() method for SQLite when I worked on Zend Framework. SQLite does not have any way to get very detailed information about metadata.

What I did was to run the following SQLite query:

PRAGMA tableinfo( <tablename> );

See http://www.sqlite.org/pragma.html, under the heading "Pragmas to query the database schema."

The result set returned from this query has columns for:

  • column position (integer)
  • column name (string)
  • data type (string)
  • nullable (0) vs. not null (1)
  • default value (string)
  • primary key (1)

You can view the PHP code by downloading Zend Framework and looking in class Zend_Db_Adapter_Pdo_Sqlite, method describeTable(). You can also view the source online via the code repository browser at framework.zend.com (although it is frequently not working).

FWIW, this is not like mysql_fetch_field(). That method returns metadata about a result set, which may not be the same thing as metadata about a table.

不打扰别人 2024-08-17 09:34:16

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

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

Example code snippet that worked for me ... to illustrate Bill Karwin's solution (it's not an attempt to answer my own question!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文