在INSERT INTO查询期间读取自动增量列

时间:2014-02-03 19:36:36

标签: php mysql

我想知道是否可以读取为要插入的行设置为自动递增的列的值?我计划将行order_id列(自动增量主键)编码为transaction_id,这是一个可公开查看的ID。

因此,搜索http://website.com/order.php?order_id=3的客户端不会搜索http://website.com/order.php?transaction_id=188117104

之类的内容

以下是我将order_id哈希到公开查看transaction_id的方法。

base_convert(  hash( "adler32", $string ), 36, 10 )

有没有办法可以获取order_id列,以便在执行查询之前将其修改为transaction_id列以将记录插入数据库?

感谢。

编辑1:

使用mysql_last_id是否可以在单个查询中执行此操作?

<?php

// Insert records for product_orders
mysql_query('
    INSERT INTO ' . DB_PFIX . 'product_orders (
        order_transaction_id
    ) VALUES (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    )
') or die (
    mysql_error()
);

?>

1 个答案:

答案 0 :(得分:1)

MySQL不支持序列,因此获取NEXTVAL并不容易。尝试这个是一个非常糟糕的主意,因为有多个用户创建插入可能导致返回错误的ID。更好的想法是进行两阶段提交(或者甚至将last_insert_id返回给PHP,然后执行另一个查询)我将使用mysql_insert_id进行两阶段事务。然后做你的逻辑并更新行。