2012-01-17 3 views
1

저는 파이어 버드에서 새로 왔지만, PHP로 CSV 파일을 읽고 기존 파이어 버드 DB에 데이터를 채우는 작은 스크립트를 작성하고 싶습니다. 문제는 자동 증가 생성기를 사용하는 방법을 모른다는 것입니다. 나는 많은 것을 봤지만 그것은 여전히 ​​나를위한 미스터리 다. db에 정의 된 gen_main 생성기가 있는데 IBExpert의 쿼리 작성기에서 사용할 수 있지만 PHP에서는 사용할 수 없습니다 ... ibase_gen_id라는 함수가 있는데 "PDO-way"는 무엇입니까? PDO가있는 자동 증가 필드가있는 행을 삽입하는 프로세스는 무엇입니까? 미리 감사드립니다.PHP PDO 파이어 버드 삽입하기

+0

데이터베이스가 트리거를 사용하여 자동 증가합니까? 그렇다면 직접 사용하지 않아도됩니다. –

+0

IBExpert에서 테이블의 종속성을 보았을 때 트리거 의존성은 없습니다. 어떻게 든 확인해도 될까요? 예를 들어 새 레코드를 추가하고 ID 필드를 공백으로두면? – haxpanel

+0

ID 필드없이 삽입 만하면 문제가 발생합니다. –

답변

3

참고 : 필자는 PDO를 한번도 사용하지 않았기 때문에 PDO 사양에 대해서는 언급 할 수 없습니다.

당신의 정확한 필요에 따라 사용할 수 있습니다 : NEXT VALUE FOR

NEXT VALUE FOR <sequence-name> 

또는

GEN_ID(<sequence-name>, 1) 

GEN_ID 시퀀스/발전기의 다음 값을 얻을 수 있습니다.

INSERT 문에서 직접 사용할 수도 있고 삽입하기 전에 먼저 RDB $ DATABASE에 대한 SELECT 쿼리를 실행하여 값을 가져올 수도 있습니다. Firebird에서는 SELECT를 사용하여 값을 가져와야합니다. 표를 선택하십시오. RDB $ DATABASE는 단 하나의 행만 포함하도록 보장됩니다 (예 : Oracle의 DUAL). 다음 순서 값을 얻으려면 SELECT NEXT VALUE FOR GEN_MAIN FROM RDB$DATABASE 또는 SELECT GEN_ID(GEN_MAIN, 1) FROM RDB$DATABASE이 필요합니다.

그러나 일반적으로 자동 증가를 수행하는 트리거를 추가하는 것이 좋습니다 (Firebird Generator Guide 참조). 그런 다음 INSERT ... RETURNING <column-list>을 사용하여 생성 된 ID를 검색 할 수 있습니다.

+0

고맙습니다, 유용했지만 다음 값 ("NEXT VALUE FOR GEN_MAIN")을 선택할 수 없습니다 : "동적 SQL 오류 SQL 오류 코드 = -104 토큰 알 수 없음 - Line 1, column 1 NEXT " – haxpanel

+0

그래서 RDB $ DATABASE에 대해 선택했다고 언급 한 이유가 있습니다 : Firebird에서는 SELECT를 사용하여 값을 검색해야하며 항상 테이블에 대해 선택해야합니다 .RDB $ DATABASE에는 (Oracle의 DUAL과 같은) 단 하나의 행이 필요하므로 다음 생성기 값을 얻기 위해'GEN_MAIN FROM RDB $ DATABASE' 또는'SELECT GEN_ID (GEN_MAIN, 1) FROM RDB $ DATABASE'가 필요합니다. –

+0

트릭을 사용할 수 있습니다. 다음 값을 검색하기 위해,하지만 이것은 해결책이 아닙니다. 생각해 : "Product"에서 처음으로 1 gen_id (GEN_MAIN, 1)을 선택하십시오 – haxpanel

관련 문제