MySQL + PHP:获取多个/复合主键的last_id

lep*_*epe 5 php mysql lastinsertid composite-primary-key

我需要获取具有多列主键的表的最后插入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")
Run Code Online (Sandbox Code Playgroud)

结果:$ last_id = $ mysqli-> insert_id?:getInsertedId() ;

34,15
Run Code Online (Sandbox Code Playgroud)

此时我有一个名为getPK()的函数,它返回给我:

array("group_id","user_id");
Run Code Online (Sandbox Code Playgroud)

我现在需要的是实现getInsertedId().在不使用SQL解析器的情况下,这可能是简单的方法吗?

我很确定这个问题已经有了答案,但我找不到任何东西......

UPDATE

我问这个问题的原因是因为我有一个控制与MySQL数据库相关的一切的类(个人框架的一部分).我有一个名为set()的方法,其中传递查询(如UPDATE,INSERT,DELETE等).我有其他特定的方法,如insert(),其中传递数组.

我有一个变量,我存储了last_inserted_id.该变量可以在以后随时调用.我在不同系统中有许多具有多主键的表.使用insert()方法时,设置last_inserted_id值没有问题,但是当某些系统使用set()方法时,我无法检索该值,我必须返回0.我想改变这种行为.

我想通过上面的例子简化我的解释.

更新2

并非所有系统都由我自己控制.例如,其中一个系统调用soap方法,在该方法中发送查询以执行(任何类型的查询).这些由set()方法处理.然后还有其他soap方法,其中检索最后一个id.为了保持一致性,我想返回该值.

Mat*_*oli 5

正如 Phil 在评论中指出的那样,MySQLLAST_INSERT_ID()只能返回自动生成的值 (AUTO_INCREMENT)。

此外,您不能在多列上使用 auto_increment:如果您有多个主键,则 auto_increment 只能在 1 列上使用。

总之,您无法LAST_INSERT_ID()在您的案例中插入密钥。

一种解决方案是在 PHP 中处理这种情况,以便getInsertedId()方法返回为插入提供的主键的值。