如何获取当前插入的AUTO_INCREMENT ID?

时间:2014-05-28 05:49:01

标签: php mysql sql

我有以下表结构。

enter image description here

我想在插入新记录时为item_image_name插入相同的值作为item_id的值(这是AUTO_INCREMENT)。

修改 我想在插入时想要这个

INSERT INTO items(user_id, item_image_name) VALUES ('','LAST_INCREMENT_VALUE + 1')

11 个答案:

答案 0 :(得分:1)

您可以通过在桌面上定义before insert触发器来实现此目的 在正文中,首先您可以找到要分配给主键字段的下一个自动增量值,并将其用于image_name字段。

示例

delimiter //

drop trigger if exists bi_on_items //

create trigger bi_on_items before insert on items
for each row
begin
  if NEW.item_image_name is null OR length( trim( NEW.item_image_name ) ) = 0 then
    set NEW.item_image_name := ( SELECT AUTO_INCREMENT 
                                   FROM INFORMATION_SCHEMA.TABLES
                                  WHERE TABLE_NAME = 'items'
                                    AND TABLE_SCHEMA = DATABASE() );

  end if;
end;
//

delimiter ;

答案 1 :(得分:0)

您可以使用mysql_insert_id()获取当前连接上的最后一个插入ID。

答案 2 :(得分:0)

mysql_insert_id - 获取上次查询中生成的ID

答案 3 :(得分:0)

使用

$sid=mysql_insert_id();

我插入第一行$sid应为1

要插入下一次使用$sid+1

修改

对于您的问题:撰写查询以获取最后一个item_id并使用该id + 1填充当前item_image_name

注意:新项目item_iditem_image_name应该相同。

答案 4 :(得分:0)

$id = mysqli_insert_id();

这应该用来代替mysql_insert_id(),因为在PHP 5.5上已经弃用了本机MySQL驱动程序。

答案 5 :(得分:0)

简短的回答:你做不到。仅在成功插入后才会生成自动增量ID。因此,在插入过程中,您将无法访问

另一种方法是首先进行插入,然后使用mysql_insert_id()获取最后一个id,然后使用检索到的id更新同一行。

PS:您应该停止使用v5.5之后正式弃用的mysql_*函数。尽快切换到PDO或mysqli。

答案 6 :(得分:0)

您可以尝试这样:

首先插入然后获取最后插入的id并更新item_image_name的值

$mysqli = new mysqli("localhost", "my_user", "my_password", "db");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}


$query = "your insert query";// insert with all fields and set item_image_name to empty


 if( $mysqli->query($query)){

    $id= $mysqli->insert_id;
    $query = "UPDATE your_table set item_image_name= '$id' where item_id = $id LIMIT 1 ";//now update the value of item_image_name
    $mysqli->query($query);
    }

USE MYSQLI_*PDO不使用mysql_*,因为mysql_*已被弃用。

答案 7 :(得分:0)

您可以使用

SHOW TABLE STATUS LIKE 'tablename'获取下一个自动增加的ID。

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_array($result);
$nextId = $row['Auto_increment'];   

然后在插入查询中使用变量$ nextId

INSERT INTO items(user_id, item_image_name) VALUES ('',$nextId)

答案 8 :(得分:0)

你使用的是什么mysql驱动程序?

如果您使用的是mysql驱动程序,那么您将使用mysql_insert_id();

获取最后插入的ID

用于PDO驱动程序:PDO::lastInsertId();

注意:不推荐使用PHP 5.5(http://php.net/manual/en/migration55.deprecated.php

中的mysql驱动程序

答案 9 :(得分:0)

首先获取最后插入的ID。

select item_id as lastId from items order by id desc limit 0,1

现在在查询中使用lastId。

INSERT INTO items(user_id, item_image_name) VALUES ('','lastId+1')

希望这有帮助。

答案 10 :(得分:0)

您可以使用插入选择查询

INSERT INTO items(user_id, item_image_name) VALUES ('','SELECT MAX(item_id)+1 FROM items')