PHP PDO Firebird 插入

发布于 2024-12-27 08:40:09 字数 252 浏览 1 评论 0原文

我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青朷 2025-01-03 08:40:09

注意:我从未使用过 PDO,因此我无法评论 PDO 的具体细节。

根据您的具体需求,您可以使用: 下一个值

NEXT VALUE FOR <sequence-name>

GEN_ID

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 生成器指南 了解详细信息。然后,您可以使用 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

NEXT VALUE FOR <sequence-name>

or GEN_ID

GEN_ID(<sequence-name>, 1)

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 or SELECT 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文