PHP PDO Firebird 插入
我是 Firebird 的新手,但我想用 PHP 编写一个小脚本来读取 CSV 文件并用其数据填充现有的 Firebird 数据库。 问题是我真的不知道如何使用自动增量生成器。我用谷歌搜索了很多,但这对我来说仍然是一个谜。数据库中定义了一个 gen_main 生成器,我可以在 IBExpert 的查询生成器中使用它,但不能在 PHP 中使用... 我看到一个名为 ibase_gen_id 的函数,它的“PDO-way”是什么? 使用PDO插入具有自增字段的行的过程是怎样的? 提前致谢!
I'm new in Firebird but I'd like to write a small script in PHP that reads a CSV file and fills an existing Firebird db with its data.
The problem is I don't really know how to use the autoincrement generator. I've googled a lot but it's still a mistery for me. There is a gen_main generator defined in the db and I can use it in the IBExpert's query builder but cannot in PHP...
I saw a function named ibase_gen_id, what is the "PDO-way" of it?
What is the process of inserting a row that has an autoincremented field with PDO?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
注意:我从未使用过 PDO,因此我无法评论 PDO 的具体细节。
根据您的具体需求,您可以使用: 下一个值
或 GEN_ID
获取序列/生成器的下一个值。
您可以直接在 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 生成器指南 了解详细信息。然后,您可以使用 INSERT ... RETURNING来检索生成的 id。
NOTE: I have never used PDO, so I can't comment on PDO specifics.
Depending on your exact needs you can use: NEXT VALUE FOR
or GEN_ID
To get the next value of the sequence/generator.
You can either use these directly in your INSERT statement, or first issue a SELECT query against RDB$DATABASE to retrieve the value yourself before inserting: in Firebird you need to use a SELECT to retrieve values, and you always need to select against a table. RDB$DATABASE is guaranteed to contain only one row (like Oracle's DUAL).
So you need
SELECT NEXT VALUE FOR GEN_MAIN FROM RDB$DATABASE
orSELECT GEN_ID(GEN_MAIN, 1) FROM RDB$DATABASE
to get the next sequence value.In general however I would advise you to add a trigger to do the auto-increment for you, see Firebird Generator Guide for details. You can then use
INSERT ... RETURNING <column-list>
to retrieve the generated id.