我想知道是否可以读取为要插入的行设置为自动递增的列的值?我计划将行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()
);
?>
答案 0 :(得分:1)
MySQL不支持序列,因此获取NEXTVAL并不容易。尝试这个是一个非常糟糕的主意,因为有多个用户创建插入可能导致返回错误的ID。更好的想法是进行两阶段提交(或者甚至将last_insert_id返回给PHP,然后执行另一个查询)我将使用mysql_insert_id进行两阶段事务。然后做你的逻辑并更新行。