Php 火鸟插入

Php 火鸟插入,php,insert,pdo,firebird,auto-increment,Php,Insert,Pdo,Firebird,Auto Increment,我是Firebird的新手,但我想用PHP编写一个小脚本,读取CSV文件并用其数据填充现有Firebird数据库。 问题是我真的不知道如何使用自动增量生成器。我在谷歌上搜索了很多,但对我来说还是一片迷雾。db中定义了一个gen_主生成器,我可以在IBMExpert的查询生成器中使用它,但在PHP中无法使用它。。。 我看到一个名为ibase_gen_id的函数,它的“PDO方式”是什么? 插入具有PDO自动递增字段的行的过程是什么? 提前谢谢 注意:我从未使用过PDO,所以我不能对PDO的细节发表

我是Firebird的新手,但我想用PHP编写一个小脚本,读取CSV文件并用其数据填充现有Firebird数据库。 问题是我真的不知道如何使用自动增量生成器。我在谷歌上搜索了很多,但对我来说还是一片迷雾。db中定义了一个gen_主生成器,我可以在IBMExpert的查询生成器中使用它,但在PHP中无法使用它。。。 我看到一个名为ibase_gen_id的函数,它的“PDO方式”是什么? 插入具有PDO自动递增字段的行的过程是什么?
提前谢谢

注意:我从未使用过PDO,所以我不能对PDO的细节发表评论

根据您的具体需要,您可以使用:

的下一个值

GEN_ID(,1)
获取序列/生成器的下一个值

您可以在INSERT语句中直接使用这些值,也可以在插入之前先对RDB$数据库发出SELECT查询以自己检索值:在Firebird中,您需要使用SELECT来检索值,并且始终需要对表进行选择。RDB$数据库保证只包含一行(类似于Oracle的双行)。 因此,您需要从RDB$数据库中选择GEN_MAIN的下一个值,或者从RDB$数据库中选择GEN_ID(GEN_MAIN,1)以获得下一个序列值


但是,一般来说,我建议您添加一个触发器来为您执行自动增量,有关详细信息,请参阅。然后可以使用
INSERT。。。返回
以检索生成的id。

数据库是否使用触发器自动递增自身?然后您不需要自己使用它,因为我在IBExpert中看到了表的依赖关系,没有触发器依赖关系。我能检查一下确定吗?例如,添加一条新记录,但将ID字段留空?只需发出一个不带ID字段的insert,然后看看会发生什么。它说:“插入失败,因为列定义包含验证约束。列ID的验证错误,值***null***”确定,则没有触发器。谢谢,这很有用,但我无法选择下一个值(查询:“GEN_MAIN的下一个值”):“Dynamic SQL Error SQL Error code=-104 Token unknown-第1行,第1列next”这就是我注意到针对RDB$数据库进行选择的原因:在Firebird中,您需要使用select来检索值,并且始终需要针对表进行选择。RDB$数据库保证只包含一行(类似于Oracle的双行)。因此,您需要
从RDB$数据库中为GEN_MAIN选择下一个值
从RDB$数据库中选择GEN_ID(GEN_MAIN,1)以获取下一个生成器值。我可以使用一个技巧来检索下一个值,但我认为这不是一个解决方案:从“产品”中选择第一个GEN_ID(GEN_MAIN,1)使用RDB$数据库,而不是一个随机表。好的,谢谢!它是有效的,但我觉得这不是获取下一个Id的正确方法。但我强调,它有效!这不是我的数据库,我不能添加触发器或任何修改,除非填充数据。
NEXT VALUE FOR <sequence-name>
GEN_ID(<sequence-name>, 1)