2

PHP5(MySqlのmysql_fetch_fieldなど)を使用して、SQLite v2.8テーブルの各列のメタデータ/制約(特に主キーと「null許可」)を取得するにはどうすればよいですか?

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

(そして「ルートページ」とは何ですか?)

4

2 に答える 2

1

describeTable()Zend Frameworkで作業したときに、SQLiteのメソッドを実装するためにこれを行う必要がありました。SQLiteには、メタデータに関する非常に詳細な情報を取得する方法がありません。

私がしたことは、次のSQLiteクエリを実行することでした。

PRAGMA tableinfo( <tablename> );

「データベーススキーマをクエリするプラグマ」という見出しの下にあるhttp://www.sqlite.org/pragma.htmlを参照してください。

このクエリから返される結果セットには、次の列があります。

  • 列の位置(整数)
  • 列名(文字列)
  • データ型(文字列)
  • null許容(0)とnull以外(1)
  • デフォルト値(文字列)
  • 主キー(1)

Zend_Db_Adapter_Pdo_SqliteZend Frameworkをダウンロードし、クラス、メソッドを調べることで、PHPコードを表示できますdescribeTable()。また、framework.zend.comのコードリポジトリブラウザを介してオンラインでソースを表示することもできます(ただし、多くの場合、機能していません)。

FWIW、これはのようではありませんmysql_fetch_field()。このメソッドは、結果セットに関するメタデータを返します。これは、テーブルに関するメタデータと同じではない場合があります。

于 2009-11-08T19:14:49.673 に答える
1

私のために働いたサンプルコードスニペット...ビルカーウィンの解決策を説明するために(それは私自身の質問に答える試みではありません!)

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