代码之家  ›  专栏  ›  技术社区  ›  Kristoffer Bohmann

sqlite v2.8(php5)中列的元数据

  •  2
  • Kristoffer Bohmann  · 技术社区  · 15 年前

    如何使用php5(比如mysql的mysql_fetch_field for mysql)为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) )
    

    (什么是“根页面”?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Bill Karwin    15 年前

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

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

    PRAGMA tableinfo( <tablename> );
    

    http://www.sqlite.org/pragma.html ,在标题“pragmas to query the database schema”下。

    此查询返回的结果集具有以下列:

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

    您可以通过下载Zend框架并在类中查找来查看PHP代码。 Zend_Db_Adapter_Pdo_Sqlite 方法 描述() . 您也可以通过framework.zend.com上的代码库浏览器在线查看源代码(尽管它经常不工作)。

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

        2
  •  1
  •   Kristoffer Bohmann    15 年前

    适用于我的示例代码段…为了说明比尔·卡尔文的解决方案(这不是试图回答我自己的问题!)

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