2012-01-17 2 views
1

Я новичок в Firebird, но я хотел бы написать небольшой скрипт на PHP, который читает CSV-файл и заполняет существующие данные Firebird db своими данными. Проблема в том, что я не знаю, как использовать генератор автоинкремента. Я много гугл, но это все еще для меня. Есть генератор gen_main, определенный в db, и я могу использовать его в построителе запросов IBExpert, но не могу в PHP ... Я видел функцию с именем ibase_gen_id, что такое «PDO-путь»? Каков процесс вставки строки с автоинкрементным полем с PDO? Спасибо заранее!Вставка PHP PDO Firebird

+0

Является ли база данных с помощью триггера для самоинкрементации? Тогда вам не нужно использовать его самостоятельно –

+0

Поскольку я видел зависимости таблицы в IBExpert, триггерная зависимость отсутствует. Могу я проверить это как-то, чтобы быть уверенным? Например, добавив новую запись, но оставьте поле идентификатора пустым? – haxpanel

+0

Просто введите вставку без поля ID и посмотрите, что произойдет. –

ответ

3

ПРИМЕЧАНИЕ: Я никогда не использовал PDO, поэтому я не могу комментировать особенности PDO.

В зависимости от ваших конкретных нужд вы можете использовать: NEXT VALUE FOR

NEXT VALUE FOR <sequence-name> 

или GEN_ID

GEN_ID(<sequence-name>, 1) 

Для получения следующего значения последовательности/генератора.

Вы можете использовать их непосредственно в своей инструкции INSERT или сначала выдать запрос SELECT с помощью RDB $ DATABASE для извлечения значения самостоятельно перед вставкой: в Firebird вам нужно использовать SELECT для извлечения значений, и вам всегда нужно выберите против таблицы. RDB $ DATABASE, как правило, содержит только одну строку (например, DUAL Oracle). Для получения следующего значения последовательности вам понадобится 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> для получения сгенерированного идентификатора.

+0

Спасибо, это было полезно, но я не могу выбрать следующее значение (запрос: «СЛЕДУЮЩАЯ ЗНАЧЕНИЕ ДЛЯ GEN_MAIN»): «Динамическая ошибка SQL Ошибка кода ошибки = -104 Ток неизвестен - строка 1, столбец 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

Я могу использовать трюк для получения следующего значения, но это не решение i think: select first 1 gen_id (GEN_MAIN, 1) из «продукта» – haxpanel

Смежные вопросы