簡體   English   中英

如何在php&mysql中與並發用戶生成下一個增量號?

[英]How to generate next increment number with concurrent user in php&mysql?

我有一個系統,用戶可以訂購多個項目,假設用戶將3個項目添加到購物車並提交訂單,然后每個項目都插入到訂單表中,但所有這些項目的訂單號都相同。 前下面。

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

我正在從最后插入的訂單號生成此order_no,因為我使用我的php腳本生成了訂單號。 除非同時有訂單,否則一切都可以正常工作。 如果同時有來自不同用戶的訂單,那么會將相同的訂單號分配給所有用戶。 我該如何克服這種情況?

您可以在Php中使用會話。 在會話中,每個用戶將具有order_id。 您也可以使用cookie 您可以輕松維護用戶的會話變量。 該會話變量包含order_id值。 什么是最新的order_id,存儲到數據庫。 當新用戶到來時,請從數據庫中讀取該訂單ID並對其遞增,然后將其分配給用戶。 更新到數據庫后。

什么是會話-

使用應用程序時,請先打開它,進行一些更改,然后再關閉它。 這很像一個會話。 電腦知道您是誰。 它知道何時啟動應用程序以及何時終止。 但是在Internet上存在一個問題:Web服務器不知道您是誰或做什么,因為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

一個用戶,任何用戶,都會創建一個訂單。 數據庫在orders表中插入一行,該行的內容類似於order_id int auto_increment primary key保證與下一個家伙不同。

在這個order_id下,您將所有購買的商品/產品掛在訂單行表(訂單明細)之類的地方。

在order_id級別將其與重復項搞混的可能性為零。

現在,如果您必須使用WKO或其他前綴添加一些派生或自定義的其他列,那也是可能的。 但是最主要的是,order_id可以防止與其他對象沖突。

請閱讀有關mysqli的內容和有關PDO的內容

MySQL 使用AUTO_INCREMENT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM