数据库
首页 > 数据库> > MySQL PHP:获取多个/复合主键的last_id

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

作者:互联网

我需要获取具有多列主键的表的最后插入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解析器的情况下,这可能是简单的方法吗?

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

UPDATE

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

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

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

更新2

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

解决方法:

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

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

总之,在您的情况下,无法使用LAST_INSERT_ID()插入密钥.

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

标签:php,mysql,lastinsertid,composite-primary-key
来源: https://codeday.me/bug/20190521/1147748.html