문제

PHP5 (MySQL의 MySQL_Fetch_field와 같은)를 사용하여 SQLITE v2.8 테이블의 각 열에 대해 메타 데이터 / 제약 (특히 "NULL 허용")을 어떻게 얻을 수 있습니까?

sqlite_fetch_column_types (oo : $db->fetchColumnTypes) 열 이름과 데이터 유형 만 가져옵니다.
http://dk.php.net/manual/en/function.sqlite-petch-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"란 무엇입니까?)

도움이 되었습니까?

해결책

나는 이것을 구현하기 위해 이것을해야했다 describeTable() Zend Framework에서 작업했을 때 SQLITE 방법. SQLITE는 메타 데이터에 대한 매우 자세한 정보를 얻을 수있는 방법이 없습니다.

내가 한 일은 다음 sqlite 쿼리를 실행하는 것이 었습니다.

PRAGMA tableinfo( <tablename> );

보다 http://www.sqlite.org/pragma.html, "데이터베이스 스키마를 쿼리하기위한 Pragmas"라는 제목 아래.

이 쿼리에서 반환 된 결과 세트에는 다음의 열이 있습니다.

  • 열 위치 (정수)
  • 열 이름 (문자열)
  • 데이터 유형 (문자열)
  • Nullable (0) vs. null (1)
  • 기본값 (문자열)
  • 기본 키 (1)

Zend Framework를 다운로드하고 클래스를 찾아 PHP 코드를 볼 수 있습니다. Zend_Db_Adapter_Pdo_Sqlite, 방법 describeTable(). Framework.zend.com에서 코드 리포지토리 브라우저를 통해 온라인 소스를 볼 수도 있습니다 (종종 작동하지는 않지만).

fwiw, 이것은 같지 않습니다 mysql_fetch_field(). 이 메소드는 결과 세트에 대한 메타 데이터를 반환합니다. 이는 테이블에 대한 메타 데이터와 동일하지 않을 수 있습니다.

다른 팁

Bill Karwin의 솔루션을 설명하기 위해 저를 위해 일한 코드 스 니펫 예제 (내 자신의 질문에 대답하려는 시도가 아닙니다!)

$db = new SQLiteDatabase("db.sqlite2");  
$rs = $db->arrayQuery("PRAGMA table_info( 'my_table' );");
print_r($rs);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top