Я новичок в Firebird, но я хотел бы написать небольшой скрипт на PHP, который читает CSV-файл и заполняет существующие данные Firebird db своими данными. Проблема в том, что я не знаю, как использовать генератор автоинкремента. Я много гугл, но это все еще для меня. Есть генератор gen_main, определенный в db, и я могу использовать его в построителе запросов IBExpert, но не могу в PHP ... Я видел функцию с именем ibase_gen_id, что такое «PDO-путь»? Каков процесс вставки строки с автоинкрементным полем с PDO? Спасибо заранее!Вставка PHP PDO Firebird
ответ
ПРИМЕЧАНИЕ: Я никогда не использовал 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>
для получения сгенерированного идентификатора.
Спасибо, это было полезно, но я не могу выбрать следующее значение (запрос: «СЛЕДУЮЩАЯ ЗНАЧЕНИЕ ДЛЯ GEN_MAIN»): «Динамическая ошибка SQL Ошибка кода ошибки = -104 Ток неизвестен - строка 1, столбец 1 NEXT « – haxpanel
Вот почему я отметил, что нужно выбирать из RDB $ DATABASE: в Firebird вам нужно использовать SELECT для извлечения значений, и вам всегда нужно выбирать против таблицы. RDB $ DATABASE гарантированно будет содержать только одна строка (например, Oracle DUAL). Таким образом, вам нужно «ВЫБРАТЬ СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ GEN_MAIN FROM RDB $ DATABASE» или «SELECT GEN_ID» (GEN_MAIN, 1) FROM RDB $ DATABASE', чтобы получить следующее значение генератора. –
Я могу использовать трюк для получения следующего значения, но это не решение i think: select first 1 gen_id (GEN_MAIN, 1) из «продукта» – haxpanel
- 1. PHP PDO Вставка данных
- 2. PHP PDO двойная вставка
- 3. Doctrine + Firebird через PDO
- 4. MAC homebrew php pdo firebird driver
- 5. PHP PDO Firebird charset никогда не изменяется
- 6. PHP PDO Mysql Вставка производительности
- 7. PHP Вставка с использованием PDO
- 8. PHP PDO: Вставка без атрибутов
- 9. Вставка Firebird очень медленная
- 10. Вставка PDO с $ _POST?
- 11. Вставка сбой во время цикла в pdo (pdo/php 5.6)
- 12. PHP PDO Простая вставка не работает
- 13. php pdo подготовленная вставка с подбором
- 14. PHP MySql PDO Множественная вставка не работает
- 15. Вставка амперсанда (&) в mysql с PDO php?
- 16. PDO Вставка не работает (PHP/MySQL)
- 17. Действительно простая вставка PHP/PDO не работает?
- 18. Вставка с использованием PDO bindValue в php
- 19. Вставка и обновление PDO
- 20. Ссылка 2 Базы данных Firebird с PDO
- 21. PDO Вставка и выполнение
- 22. PDO Вставка не работает
- 23. PDO Вставка не работает
- 24. Вставка с расширением PDO
- 25. Вставка HTML с PDO
- 26. PHP PDO апостроф
- 27. Вставка нескольких строк с PDO
- 28. последняя вставка id в pdo
- 29. Firebird, вставка запись с помощью окна запроса
- 30. IIS + PHP 7 + Firebird
Является ли база данных с помощью триггера для самоинкрементации? Тогда вам не нужно использовать его самостоятельно –
Поскольку я видел зависимости таблицы в IBExpert, триггерная зависимость отсутствует. Могу я проверить это как-то, чтобы быть уверенным? Например, добавив новую запись, но оставьте поле идентификатора пустым? – haxpanel
Просто введите вставку без поля ID и посмотрите, что произойдет. –