-----是爲題前端
MySQL 事務主要用於處理操做量大,複雜度高的數據。好比說,在人員管理系統中,你刪除一我的員,你即須要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操做語句就構成一個事務!事務處理能夠用來維護數據庫的完整性,保證成批的 SQL 語句要麼所有執行,要麼所有不執行。數據庫
通常來講,事務是必須知足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。api
-----引子微信
在代碼的世界,非0即TRUE,不會存在第三種狀況,這也正是「事物」這一操做產生的必要。古今多少事,都是了而了之,最後不了了之。行百里者半九十。不少故事有一個很是好的開頭,最後都難免留下一個狗血的結尾,或者更多的是沒有後來。session
-----正文框架
某一天,小白正在寫代碼,打開公司項目的搖一搖,發現出現一個異常。正常的是直接進到加載展現搖一搖頁面,可是如今顯示的是Https證書失效。前幾天有顧客反映部分安卓用戶搖一搖顯示空白頁,沒法進入搖一搖頁面。可是過一會搖一搖又正常能夠進去,因而小白陷入迷惑中不自知。測試
次日,又有顧客反映仍是沒法進入搖一搖頁面,小白感受到事情可能有點嚴重。爲何以前搖一搖沒有問題,忽然就出現證書失效和部分安卓用戶沒法進入搖一搖頁面。這一段時間沒有進行任何業務功能的更改和代碼的修改。那就應該是這個Https證書失效的問題,因而小白反饋到了上級,查看,果真是證書已到期。this
https證書到期的提示,才發現安卓手機和iOS手機提示是不同的,iOS手機是能夠直接提示出來,而且還有是否信任該連接,能夠點擊跳轉的;可是安卓是直接不顯示的,因此這就和最近顧客反映的部分安卓手機搖一搖頁面空白對應起來了。「部分安卓手機」,小白本身iOS手機也是有時候提示證書到期,有時候正常。小白查詢公司公衆號後臺,發現生成的搖一搖連接有些是帶S的有些是不帶S的,因此這也就和部分安卓用戶,和有時候小白本身能夠搖出來頁面,有時候提示證書到期,原來是不一樣的設備和頁面致使的。url
問題找到了,上級原本想給證書續費,才發現人事變動致使沒有改帳號,因此直接變換了域名固然從新購買了證書。由於小白公司項目是依託於公衆號,因此用戶對域名不敏感。由於全部的關於業務域名方向,都是採用動態獲取的。因此在變動域名中,代碼不須要作任何更改,只是須要把搖一搖設備已經生成的頁面URL修改一下便可,雖然有上千個,但畢竟是直活,小白仍是沒有太多的反感,欣欣然然的處理着。週五,所有完成,小白也安心過週末。spa
$_SERVER['HTTP_HOST']
週六下午,公司反饋說新用戶進入搖一搖異常,小白那時候正在圖書館,看海明威的《永別了,武器》,準確的說不是看,是在抄寫,是的,由於此從離校或者說此從高中畢業後,小白就不多看書了,已經徹底沒法看書了,可是小白依舊想看書,懷念之前高中那種看書的心態和看到一些新的故事時候的高興和收穫。畢業後,小白雖然不多看書了,但小白仍是一直在買書,小白相信小白有一天或者明天就會看的,至少想看的時候,書就在身邊。後來小白髮現問題像是有點大,因此小白就決定用抄寫的方式來解決這個問題。
小白瞄了一眼微信,發現提示是「頁面失效,未知用戶」。這個小白很熟悉,由於是他寫的,用於在操做業務時,沒法獲取到當前用戶信息的斷點。這個提示的出現自己就是一個問題,正常到了操做業務時,不可能出現尚未獲取用戶信息的狀況。那隻能說明用戶登錄出現了問題,可是登錄這一塊小白一隻很頭疼,由於很繁瑣,很雜亂,由於是一個二開的項目上更改的,登錄的問題很大,但也能夠說不大,若是一個問題大到你已經沒法處理了,那問題的處理就對你來講失去了意義。可是,正是由於這個登錄的問題,由於以前也是因爲登錄致使部分用戶出現錯誤頁面,後來定位到也是因爲未獲取用戶信息,就進行業務操做,致使的數據庫空查詢報錯。也是因爲一直是「部分」,全部後來,小白在基本熟悉新項目框架流程後,就着手把原來的登錄進行了重構,也不能說是重構把,在原先的基礎上進行處理,基本算是9成的重構吧。由於小白對於當下已經上線的項目,尚未這麼大的信心徹底去從新。
全部通過一週的測試和完善,迭代後登錄就再沒有碰見先前的問題。「頁面失效,未知用戶」,這個提示使得小白很煩躁,像是讓小白又想起了那段時間——錯誤已經出現,可是你沒法找到錯誤產生的緣由,你沒法獲取到錯誤的產生緣由,你在不停的調試,盡你所能想到的,可是錯誤依舊出現,而且長時間你沒有解決他。
若是是登錄出現了問題,那說明以前努力作的迭代產品,依舊存在着問題。可是不可能,也許小白對那段時間太深入了,以致於他不想這麼早就懷疑本身的努力。由於後來的迭代是在徹底吃透前面老兄寫的流程後更改的,因此方向和跟隨的腳步不該該有問題。何況,後來運行也一直沒有在反饋出問題。
小白的內心有點難受,以爲很煩躁,小白是那種內心裝不住事情的人,第二天下午,公司又反饋出有用戶在激活禮品卡的時候報「調取接口失敗,500」,激活卡卷只是一個簡短的調起.NET寫的接口的業務,沒有任何冗餘。小白本身在手機上嘗試了一下,並無發現任何異常,又是這個「部分」。
週一,一大早小白就來到了公司。斷點,記錄,斷點,記錄,用戶試圖操做業務時,沒有完成新用戶的註冊;查看新用戶註冊流程;發現新用戶在調用微信接口獲取用戶信息時,這裏就斷掉了,可是實際又出現了受權頁面。
在小白後來迭代的代碼裏,在獲取用戶信息時,就沒有往下走了,老猿對小白說這個彈窗受權頁面沒有出來。小白想也是,這個地方按道理應該出現一個頁面的跳轉,獲取Code碼,是的在這裏斷掉了。老猿淡然的指到你這裏的Head頭部是寫死的「Http」,如今不是已經換成了「Https」嗎。
/** * 獲取微信會員信息,彈出受權頁面snsapi_userinfo */ public function get_openid_info() { if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) { // 經過code得到openid if (empty($_GET['code'])) { // 觸發微信返回code碼 if (! empty($_SERVER['QUERY_STRING'])) { $query_string = "?" . $_SERVER['QUERY_STRING']; } $baseUrl = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $query_string; $url = $this->get_authorize_url_userinfo($baseUrl, "123"); Header("Location: $url"); exit(); } else { // 獲取code碼,以獲取openid $code = $_GET['code']; $data = $this->get_access_token($code); $openid = $data; // session('openid', $openid); //寫入本地SESSION } } return $openid; }
小白聽完,加上一個S,上傳,測試發現異常解決了。
/** * 獲取微信會員信息,彈出受權頁面snsapi_userinfo */ public function get_openid_info() { if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) { // 經過code得到openid if (empty($_GET['code'])) { // 觸發微信返回code碼 if (! empty($_SERVER['QUERY_STRING'])) { $query_string = "?" . $_SERVER['QUERY_STRING']; } $baseUrl = $_SERVER['REQUEST_SCHEME'].'://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $query_string; $url = $this->get_authorize_url_userinfo($baseUrl, "123"); Header("Location: $url"); exit(); } else { // 獲取code碼,以獲取openid $code = $_GET['code']; $data = $this->get_access_token($code); $openid = $data; // session('openid', $openid); //寫入本地SESSION } } return $openid; }
老猿對小白說,這個頭部不知道爲啥是寫死的,其餘項目我已經所有改過來了,這個沒有改。小白想,這段獲取用戶對微信關注信息的,由於當時看這段是一個固定的邏輯業務,沒有重點關注,直接複製過來用,因此沒有考慮到代碼的強壯性這一塊。這個問題解決了,那麼激活禮品卡失敗,小白查看了本身寫的日誌,發現又是「部分」用戶在獲取輸入帳戶及密碼後就斷掉了,這種狀況以前碰見過一個就是獲取Ip報錯的一個低級錯誤致使,後來修復了。
小白因而問上級,禮品卡上面是否有一個碼了,能夠供用戶掃碼直接進入項目,上級說說是的,有一個二維碼,用戶能夠直接掃碼進入到輸入卡密和卡號的頁面。小白明白了,新用戶在拿到禮品卡後,直接掃碼,進去到激活卡卷頁面,程序檢測到新用戶,因而進行獲取用戶的信息,進行用戶註冊,在調用微信接口的時候,因爲http已經變動爲https因此這個跳轉的URL已經失效,因此沒有拿到用戶信息。但往下走嘗試操做業務時,便產生了一個空查詢操做,接口報錯致使,前端顯示「接口調取失敗,500」。
因而小白,更改所有爲動態獲取和檢查後,提交及回覆了上級。
-----結束