如何在php& mysql中使用并发用户生成下一个增量号?

时间:2015-10-01 06:07:31

标签: php mysql

我有一个用户可以订购多个商品的系统,假设用户向购物车添加了3个商品并提交订单,然后每个商品都插入到订单表中,但所有这些商品的订单号都相同。以下。

order_id product_id    order_no 
10895    ACP1001       WKO00000003659 
10894    ACP1000       WKO00000003659 
10893    ACP1001       WKO00000003658 
10892    ACP1000       WKO00000003658 

我从最后插入的订单号生成此order_no,因为我使用我的php脚本生成订单号。除非有同步订单,否则一切都很完美。如果来自不同用户的同时订单,则为所有用户分配相同的订单号。我怎样才能克服这种情况呢?

2 个答案:

答案 0 :(得分:1)

您可以在Php中使用会话。在会话中,每个用户都会有order_id。您也可以使用cookies。您可以轻松地为用户维护会话变量。此会话变量包含order_id值。 什么是最新的order_id,存储到数据库。当新用户到来然后从数据库中读取该订单ID并递增它然后分配给用户。更新到数据库之后。

什么是session-

  

使用应用程序时,打开它,进行一些更改,然后   然后你关闭它。这很像一个Session。电脑知道谁   你是。它知道您何时启动应用程序以及何时结束。但   在互联网上有一个问题:网络服务器不知道谁   你是或你做什么,因为HTTP地址不维护   状态。

     

会话变量通过存储用户信息来解决此问题   用于多个页面(例如用户名,喜欢的颜色等)。通过   默认情况下,会话变量会持续到用户关闭浏览器为止。

     

因此;会话变量包含有关单个用户的信息,并且是   可用于一个应用程序中的所有页面。

我只是一个例子。您的情况可能有所不同。

 mysql > desc order_id_generate;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+

<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(isset($_SESSION['order_id']) && !empty($_SESSION['order_id'])) {
   echo "Already ordered set and not empty ! ".$_SESSION[`order_id`];
}
else {
   $query = "INSERT INTO order_id_generate VALUES ()";
   $mysqli->query($query);
   $temp=$mysqli->insert_id;
   // set the new order
   $_SESSION['order_id']=$temp;
   echo "Ordered set and not empty ! ".$_SESSION[`order_id`];
}

$conn->close();
?>
</body>
</html>

更多@ w3schoolphp mannual

答案 1 :(得分:1)

用户,任何用户,都会创建订单。 db在订单表中插入一行,其中order_id int auto_increment primary key保证与下一个人不同。

在此order_id下,您可以将所有商品/产品购买挂在订单行表格中(订单明细)。

在order_id级别重置错误的可能性为零。

现在,如果你必须有一些带有WKO或其他前缀的派生或其他自定义其他列,那也是可能的。但主要的是,order_id可以避免与其他人发生冲突。

阅读this for mysqli,阅读this for PDO

Mysql Using AUTO_INCREMENT