标签: lastinsertid

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")
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.为了保持一致性,我想返回该值.

php mysql lastinsertid composite-primary-key

5
推荐指数
1
解决办法
5330
查看次数

使用MYSQL LAST_INSERT_ID()来检索插入行的ID?

我有一张桌子,里面有一个专栏AUTO INCREMENT.我必须在插入新行时检索此列的值(我需要新行的值).我已经阅读了很多关于它并找到了不同的解决方案,一个是使用SELECT LAST_INSERT_ID().我听说过很多不同的事情.我可以或不可以使用它吗?我担心另一个连接可能在我能够调用之前插入一个新行SELECT LAST_INSERT_ID(),因此得到错误的ID.

总结一下,使用安全SELECT LAST_INSERT_ID()吗?如果没有,我如何以安全的方式检索最后插入的ID?

php mysql select lastinsertid

5
推荐指数
1
解决办法
3098
查看次数

获取最后一个插入ID显示错误的数字

我有三个记录的表.有一个归档为auto_increment.身份证是1,2,3 ......

当我运行查询

SELECT LAST_INSERT_ID() FROM myTable
Run Code Online (Sandbox Code Playgroud)

结果是5,即使最后一个ID是3.为什么?

什么是更好用?LAST_INSERT_ID()或SELECT MAX(ID)FROM myTable?

mysql lastinsertid

5
推荐指数
2
解决办法
2770
查看次数

最后使用AQL在ArangoDB中插入了_key?

如何使用AQL查询在ArangoDB中接收最后插入的_key?我把项目放在集合中,以下元素必须包含_key创建的元素.我怎么得到这个_key?

lastinsertid arangodb aql

4
推荐指数
1
解决办法
386
查看次数

我如何处理mysql表中的并发插入并获取正确的插入ID

我正在使用adodb for PHP库.

为了获取插入记录的id,我使用此函数

"$db->Insert_ID()"

我想知道是否有多个同时插入数据库表,这个方法会为每个插入的记录返回正确的插入ID吗?

我问这个的原因是因为我使用这个最后一个插入id来进一步处理其他记录并在相关表中进行后续输入.

这种方法是否足够安全,或者我错过了什么.

请帮我为此制定一个正确的工作计划,以便我可以使用最后一个插入ID进一步插入到另一个表中,而不必弄乱现有数据.

谢谢

php insert-id adodb lastinsertid

3
推荐指数
1
解决办法
3847
查看次数

使用mysql_last_id()的竞争条件

我花了大部分时间试图找到答案,但似乎没有一个在那里.我需要在表中创建一行的函数,从插入的行中检索自动增量,然后使用该值在第二个表中插入另一行.功能类似于以下php的东西:

$mysql_query("INSERT INTO table1 SET columns='values'");
$id = mysql_insert_id();
$mysql_query("INSERT INTO table2 SET id='$id', columns='values'");
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在我的应用程序中,所有类之间共享一个MySQL连接,所以我担心这可能会导致竞争条件,其中另一个类在运行第一行和第二行之间插入一行上面提到的.

我能提出的最简单的解决方案是使用任何mysql_insert_id()开放新的,唯一的连接的功能,但这似乎是一个巨大的不必要的开销.我玩过的其他答案包括插入一个唯一值(可能是UUID()用它创建)并使用它而不是自动增量值,或者可能将第一个插入和调用LAST_INSERT_ID()放入存储函数中(尽管我不确定)如果那样可以解决可能的竞争条件).

我也一直在调查交易,看看它们是否有帮助,但几乎没有关于如何mysql_insert_id()与它们进行精确交互的文档.我能说的最好,他们可能在这里没有帮助,因为另一个INSERT与任何事务的锁没有冲突的人仍然可以执行并可能导致相同的竞争条件.

所以,假设我没有与上述任何一个错误(如果我是,请纠正我),确保100%第二个INSERT使用正确值的最佳方法是什么?

php mysql sql transactions lastinsertid

3
推荐指数
1
解决办法
2628
查看次数

PDO + PHP lastInsertId()问题

如果例如当用户点击链接,自动插入新行然后php代码请求最后插入的id,同时另一个用户插入另一行时,它不会有问题吗?所以返回的id实际上不是我期待的那个..?

我错了吗?没有"安全"漏洞,有没有办法做同样的事情?
(可能来自准备好的声明或其他内容......)

PS自动生成id.

谢谢.

php mysql database pdo lastinsertid

3
推荐指数
1
解决办法
3090
查看次数

Zend/ZF2/TableGateway mysql_insert_id替换?

我试图从mysql切换到Zend/TableGateway类.

我不知道是否有一种方法,类似于mysql_insert_id,得到最后插入行的自动增量ID.

谷歌搜索周围,我发现了一些答案,数据库适配器的指向lastInsertId(),但是,这种方法似乎ZF2不再可用.另外:insert方法的返回值返回一个布尔值,而不是ZF1中的最后一个id.

目前我正在使用一个丑陋的解决方法.请参阅下面的代码.

是否有更好/推荐的获取身份证的方式?

table_1 {
    id: integer, primary key, autoincremented
    content: text
}

table_2 {
    table_1_id: integer
    other_content: text
}

// using mysql
$sql = "INSERT INTO table_1 (content) VALUES ('some text')";
$result = mysql_query($sql);
// check omitted

$id = mysql_insert_id();
$sql = "INSERT INTO table_2 (table_1_id, other_content) VALUES ($id, 'other text')";
$result = mysql_query($sql);


// using Zend - this is the code, I am currently using
//*************************************************************
// get_last_insert_id emulation; works only if content is unique
private …
Run Code Online (Sandbox Code Playgroud)

lastinsertid zend-db last-insert-id zend-framework2 tablegateway

3
推荐指数
1
解决办法
4318
查看次数

pdo lastInsertId返回零(0)

所有查询都成功执行,当我检查MySQL行中的表成功插入没有任何错误,但lastInsertId() 返回0.为什么?

我的代码:

// queries executes successfully, but lastInsetId() returns 0
// the menus table has `id` column with primary auto_increment index
// why lastInsertId return 0 and doesn't return actual id?


$insertMenuQuery = " 
 SELECT @rght:=`rght`+2,@lft:=`rght`+1 FROM `menus` ORDER BY `rght` DESC limit 1; 
 INSERT INTO `menus`(`parent_id`, `title`, `options`, `lang`, `lft`, `rght`) 
      values 
  (:parent_id, :title, :options, :lang, @lft, @rght);";
     try {
           // menu sql query
           $dbSmt = $db->prepare($insertMenuQuery);

           // execute sql query
           $dbSmt->execute($arrayOfParameterOfMenu);
           // menu …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo lastinsertid

3
推荐指数
2
解决办法
7349
查看次数

如何从另一个php文件中使用PostgreSql的CURRVAL/RETURNING?

我正在INSERT从一个php文件运行查询,但后来我需要从外部php文件中获取最后一个插入的id,以便根据该id运行另一个查询.我怎么能用CURRVAL或用它来解决这个问题RETURNING?从外部的php文件,如果我做的事情

$result = pg_query($db,"SELECT CURRVAL('app.example_id_seq'), ... "); 我没有结果.

postgresql lastinsertid postgresql-9.1 sql-returning currval

3
推荐指数
1
解决办法
969
查看次数