【发布时间】:2011-11-03 12:00:27
【问题描述】:
我需要获取最后插入的具有多列主键的表的 id。
- 那些表没有 AUTOCOUNT 列。
- 我正在使用参数化查询(任意顺序)
- 使用 PHP (5.3) 和 MySQLi 模块
- 任意 INSERT SQL 查询。 (任何格式)
例如:
Table: foo
Primary key: [ group_id , user_id ]
Query: INSERT INTO foo (group_id, user_id, name, email) VALUES (?, ?, ?, ?);
Parameters: array(34,15,"John","john@example.com")
结果:$last_id = $mysqli->insert_id ?: getInsertedId();
34,15
此时我有一个名为 getPK() 的函数,它返回我:
array("group_id","user_id");
我现在需要的是实现 getInsertedId()。在不使用 SQL 解析器的情况下,哪一种方法更简单?
我很确定这个问题已经有了答案,但我找不到任何东西......
更新
我问这个问题的原因是因为我有一个类可以控制与 MySQL 数据库相关的所有内容(个人框架的一部分)。我有一种称为 set() 的方法,其中传递了查询(如 UPDATE、INSERT、DELETE 等)。我还有其他特定的方法,例如 insert(),其中传递了数组。
我有一个变量用于存储 last_inserted_id。以后可以随时调用该变量。我在具有多个主键的不同系统中有许多表。 使用 insert() 方法时,我可以设置 last_inserted_id 值,但是当某些系统使用 set() 方法时,我无法检索该值并且我必须返回 0。我想改变这种行为。
我想用上面的例子来简化我的解释。
更新 2
并非所有系统都由我自己控制。例如,其中一个系统调用soap 方法,在该方法中发送查询以执行(任何类型的查询)。这些由 set() 方法处理。然后还有其他soap方法可以检索最后一个id。为了保持一致性,我想返回该值。
【问题讨论】:
-
如果指定
group_id和user_id,为什么要在INSERT之后从数据库中取回它们? -
在解决代码问题时,您可能想再看一下该表结构。它似乎只存在于 1NF 中,尽管我无法仅通过列名和一行数据来确定。
标签: php mysql composite-primary-key lastinsertid