我是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. PHP PDO插入数据
- 2. PHP PDO Mysql插入性能
- 3. 插入数据 - PHP PDO
- 4. PHP PDO插入错误
- 5. 用PHP PDO插入多行
- 6. PHP PDO默默不插入
- 7. PHP PDO插入方法
- 8. 通过PDO的Doctrine + Firebird
- 9. PHP PDO插入多选择数据
- 10. php pdo准备插入选择
- 11. 用外键插入表 - PHP PDO
- 12. 用PDO php在mysql中插入&符号(&)?
- 13. 插入具有选择(PDO)和PHP
- 14. PHP PDO插入操作失败
- 15. PHP PDO插入语句不通过
- 16. PHP PDO插入NULL而不是空potsgresql
- 17. 插入触发后的Firebird - 插入时间戳插入行
- 18. PDO - 记录插入问题?
- 19. PDO插入不工作
- 20. 插入行PGSQL使用PDO
- 21. 倾斜插入件插入用PHP插入数据的基础上使用PDO
- 22. 带POST的PDO插入
- 23. PDO插入语句无法插入db
- 24. 使用PDO插入不插入值
- 25. PDO插入查询不插入数据
- 26. PDO输出UTF8插入
- 27. PDO && MySQL的插入查询
- 28. CSV PDO插入循环?
- 29. PHP/PDO下的MySQL插槽
- 30. firebird - 插入或更新触发器后
数据库是否使用触发器来自动增量?那么你不需要自己使用它 – 2012-01-17 14:03:43
正如我在IBExpert中看到该表的依赖关系那样,没有触发依赖性。我可以检查它以确定吗?例如,通过添加新记录,但保留空白ID字段? – haxpanel 2012-01-17 14:18:24
只需发出没有ID字段的插入,看看会发生什么。 – 2012-01-17 14:33:28