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

标签 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()
);

?>

最佳答案

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

关于php - 在 INSERT INTO 查询期间读取自动增量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536133/

相关文章:

javascript - Bootstrap Carousel 和我正在构建的主题出现问题

mysql - 我应该如何对这个表进行分区?

php - 无法将 PHP 应用程序与 MySQL 连接

mysql - 将记录插入带有位置的表中,而不更新所有记录的位置字段

mysql - Node js(Express js)Mysql读取ECONNRESET错误

php - 拉维尔 : one to one relationship becomes one to many relationship

mysql - 存储过程 (mysql) 失败, "can' t 返回给定上下文中的结果集”

javascript - 我的jQuery验证不适用于我的php/html表单,不确定为什么

php - HTML、CSS 导航栏元素通过包含相同文件突出显示,在所有必需页面中包含导航栏

php - 解析 PubMed 查询的curl结果并将其格式化为引文