<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 生成唯一訂單號 確保生產唯一的訂單號,字段建立唯一索引。 * * * * * ### 一般方案 ```php for ($i = 0; $i < $data['createnum']; $i++) { do { // $code = strtolower(get_rand_str(8, 0, 1)); // 獲取隨機8位字符串 // 零填充導致Excel顯示數字不正確 $code = zerofill(mt_rand(0, 99999999), 8, 9); $password = mt_rand(1000, 9999); // 獲取隨機4位數字 $check_exist = M('exchange_list')->where(array('code' => $code))->find(); } while ($check_exist); $add['code'] = $code; $add['password'] = $password; $newId = M('exchange_list')->add($add); if (!$newId) { exit('重復!'); } else { } } ``` https://coding.net/u/xiasf/p/gj-shop/git/blob/master/Application/Admin/Controller/ExchangeController.class.php 這里只知道插入失敗就表示重復,其實這是不準確的,有可能是別的原因導致插入失敗呢,不一定是重復原因,除非能得到sql失敗的錯誤碼,每種情況都有一個系統確定的錯誤碼,比如重復有一個錯誤碼。 重復不能失敗,而是要重試。 * * * * * ### 終極方案 ```php /* 插入訂單表 */ $error_no = 0; do { $order['order_sn'] = get_order_sn(); //獲取新訂單號 $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), $order, 'INSERT'); $error_no = $GLOBALS['db']->errno(); if ($error_no > 0 && $error_no != 1062) { die($GLOBALS['db']->errorMsg()); } } while ($error_no == 1062); //如果是訂單號重復則重新提交數據 $new_order_id = $db->insert_id(); $order['order_id'] = $new_order_id; ``` 這里更加完善就是能夠識別到重復插入(唯一索引限制)報錯的錯誤碼:1062 不過這個錯誤碼可能每個數據庫系統都不一樣。 這種方式應該是最完美安全的終極方案了。 [電商網站訂單號怎么生成呢?我目前用訂單ID來做感覺不行,從1開始這樣太不好看了,像淘寶那樣的訂單ID怎么生成的呢? - apple的回答 - SegmentFault 思否](https://segmentfault.com/q/1010000004104517/a-1020000014209988) * * * * * ```php // tpDb操作出錯要拋出異常,只能這么處理了。 // 如果這步驟出錯,基本就是重復的問題,那么一直重試,再次生成邀請碼更新進去,直至成功 do { try { // 生成唯一邀請碼 Db::name('user')->where('id', $newId)->update([ 'invitation_code' => createInvitationCode(), ]); $upStatus = 1; } catch (\Exception $e) { trace('createInvitationCode: [' . $e->getCode() . '] ' . $e->getMessage(), 'error'); $upStatus = 0; } } while ($upStatus == 0); ``` * * * * * ### 擴展 [分布式ID生成器 | 架構師之路](http://mp.weixin.qq.com/s/AHRCYOjnXAgcy2j6vziukQ) [如何做一個靠譜的發號器](https://tech.youzan.com/id_generator/) * * * * * last update:2018-4-10 04:45:12
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看