我是Firebird中的新成員,但我想在PHP中編寫一個小腳本,用於讀取CSV文件並使用其數據填充現有的Firebird數據庫。 問題是我真的不知道如何使用自動增量生成器。我搜索了很多,但對我來說仍然是一個謎。在db中定義了一個gen_main生成器,我可以在IBExpert的查詢生成器中使用它,但不能在PHP中使用它... 我看到一個名爲ibase_gen_id的函數,它的「PDO-way」是什麼? 插入一個具有PDO自動增量字段的行的過程是什麼? 在此先感謝!PHP PDO Firebird插入
回答
注:我從來沒有使用過PDO,所以我不能評論PDO的具體情況。
根據您的需求,您可以使用:NEXT VALUE FOR
NEXT VALUE FOR <sequence-name>
GEN_ID(<sequence-name>, 1)
來獲取序列/發電機的下一個值。
你可以直接在你的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。
謝謝,它很有用,但我無法選擇下一個值(查詢:「GEN_MAIN的下一個值」):「動態SQL錯誤SQL錯誤代碼= -104令牌未知 - 第1行,第1列下一個「 – haxpanel 2012-01-17 15:59:35
這就是爲什麼我注意到選擇反對RDB $ DATABASE:在Firebird中,您需要使用SELECT來檢索值,並且您始終需要根據表選擇RDB $ DATABASE保證包含只有一行(如Oracle的DUAL),所以你需要'從RDB $ DATABASE'選擇下一個值爲GEN_MAIN或者從RDB $ DATABASE'選擇GEN_ID(GEN_MAIN,1)來獲得下一個生成器的值 – 2012-01-17 16:02:36
我可以使用一個技巧檢索下一個值,但這不是我的解決方案請考慮:從「產品」中選擇第一個gen_id(GEN_MAIN,1) – haxpanel 2012-01-17 16:04:57
- 1. Firebird插入很慢
- 2. PHP PDO插入問題
- 3. PHP PDO默默不插入
- 4. 用PHP PDO插入多行
- 5. php pdo多行插入
- 6. 插入數據 - PHP PDO
- 7. PHP PDO插入方法
- 8. PHP PDO插入錯誤
- 9. PHP pdo插入查詢
- 10. PHP PDO Mysql插入性能
- 11. 使用PDO的PHP插入
- 12. PHP Sqlite和PDO插入
- 13. php pdo插入循環中
- 14. 使用PDO插入php
- 15. 通過AJAX插入PHP PDO
- 16. PHP PDO插入數據
- 17. PDO插入錯誤的PHP
- 18. PHP PDO:設置FireBird連接超時
- 19. 通過PDO的Doctrine + Firebird
- 20. 插入與PDO
- 21. PDO插入不插入
- 22. PDO插入驗證
- 23. PHP PDO插入查詢失敗
- 24. 使用循環插入PHP PDO
- 25. MySQL的PHP PDO插入值不工作
- 26. PHP PDO最後插入編號
- 27. PHP pdo插入查詢不起作用
- 28. 插入具有選擇(PDO)和PHP
- 29. 使用pdo/php插入數據表
- 30. PHP PDO簡單插入不起作用
數據庫是否使用觸發器來自動增量?那麼你不需要自己使用它 – 2012-01-17 14:03:43
正如我在IBExpert中看到該表的依賴關係那樣,沒有觸發依賴性。我可以檢查它以確定嗎?例如,通過添加新記錄,但保留空白ID字段? – haxpanel 2012-01-17 14:18:24
只需發出沒有ID字段的插入,看看會發生什麼。 – 2012-01-17 14:33:28