各位大大好:
想請問讓客戶登入帳密即產生一個訂單編號,如用下面的程式,因為怕重複,是否需要馬上將流水編號寫入暫存資料表(但若客戶未完成訂單,流水編號就要從資料庫刪除..刪除的方法目前想到若客戶有填完單寫入正式資料表有流水編號跟暫存資料表的流水編號比對,若沒有對到號的流水編號就刪除..可是這樣好像也會有問題比如有人已產生流水號但較慢送出完整資料..)
謝謝
function writeMsg() {
$hostdb='127.0.0.1';
$namedb='survey';
$userdb='root';
$passdb='!';
$conn= new PDO("mysql:host=$hostdb;dbname=$namedb",$userdb,$passdb);
//echo'資料庫伺服器連線及資料庫開啟成功';
$conn->exec("SET CHARACTER SET utf8");
$taiwan_year = date('Y')-1911;
$sqnumber=$taiwan_year.substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 7);
$sql="SELECT * FROM 108u where sqnumber= ?";
$result = $conn->prepare($sql);
$result->execute(array($sqnumber));
$result2=$result->fetch(PDO::FETCH_OBJ);
if ($result2){
echo writeMsg();
}
else{
echo $sqnumber;
}
}
登入帳密即產生一個訂單編號
還有這種機制,
通常是要插入的時候再產生編號就好了,
如果怕衝到可以使用transaction.
我認為與其將未成功的訂單單號刪除,不如保留已產生訂單編號然後寫一個資料庫欄位另外辨識就好,如A20191009001已經產生,附加一個資料庫欄位為is_done預設為0,若真的完成整筆訂單就將is_done改為1,這樣做要取得最新的訂單編號也相對簡單。