2017-06-20 129 views
-1

我必須在PHP發票中生成增量數字,從1開始。 我的想法是創建一個自動增量字段從1開始的表格。 當用戶付款時,我看在保存的最後一個條目的表格中,我得到它的字段值(自動增量一),然後我使用+1來生成發票號碼,並使用新的發票號碼保存一個新條目以跟蹤它。我的想法是否正確?如果2個用戶同時查看錶格(2個查詢)怎麼辦?在這種情況下,他們將從最後保存的價值中獲得相同的價值,並最終生成相同的發票編號。這是否會發生? Tahnks。PHP/MySQL生成增量發票號碼

+1

不,這是不正確的做法...自動增量的重點在於它可以爲您工作,並且可以安全地進行工作....插入新的空發票以獲取號碼,然後更新它與細節 –

回答

0

無需插入新值,因爲自動增量會爲您執行此操作,如果您需要在屏幕上跟蹤正確的發票號碼,我建議使用臨時表來保留髮票號碼分配給該用戶,所以當2或者更多用戶正在工作,他們將在屏幕上顯示不同的發票號碼,則可以進行查詢,以檢查兩個表上的最大ID,以免它們在屏幕上重複。

儘管使用autoincrement id,它不應該重複發票號碼。

0

不,不要這樣做。如果您需要在用戶首次創建發票號碼時顯示發票號碼,請在第一次顯示時在數據庫中創建條目,然後可以在屏幕上顯示此號碼,然後使用發票的相關更新更新該發票。

不知道您使用的是什麼框架,通常當您執行Insert命令時,會返回一個允許您訪問自動遞增的ID的框架。

+0

插入命令的返回告訴你已經受到影響的行數。您無法從那裏知道新的自動遞增的ID。但是,如果在插入查詢後會有選擇,那麼除了最大ID之外,還應該添加更多條件以限制獲取錯誤插入行的危險。 –

+0

@VassilikiM。你是對不起,但是你可以根據你使用的庫從其中一個函數獲得ID,並根據當前連接返回它,這將防止OPs問題中的併發問題。 https://stackoverflow.com/questions/1685860/how-do-i-get-the-last-inserted-id-of-a-mysql-table-in-php – Rudiger

+0

哦,我不知道這些替代品。儘管我相信這些調用的內部邏輯可能會隱藏一個SELECT方法,不管這些方法是什麼但不影響我們,所以這是一個很好的解決方案。感謝提及它! –