由php事務掛掉開始

2021-06-11 11:30:08 字數 1080 閱讀 5186

今天有同事碰到乙個問題,說是開事務了,然後在中間有個地方因為**的原因中斷了,結果資料庫就堵在**了。

一、首先,同事說是因為中間**有錯誤,就會停止執行。於是我寫了一段**

20 try   

26 catch(exception $e)   

29 echo "done\n";

發現上面的**是能一直執行下去的,就開始懷疑同事的說法,覺得php是解釋型語言,碰到錯誤就直接忽略,繼續執行

後來,同事在裡面加了一行**

$aa::a();

立馬執行不了了

比較了這兩個程式,發現乙個是語法錯誤,另乙個是執行時錯誤,就像難道php會先進行語法檢查,看了下php的執行過程,確實,php指令碼先由zend引擎編譯成opcode序列,這個過程中如果有語法錯誤,是不會進行編譯的。這裡有個問題,錯誤處理函式能捕獲到到語法錯誤不?

於是就想php有哪些語法錯誤:查了下,常見的大概有這麼幾種

parse error: parse error, expecting

1、變數沒加$號

2、缺少;號

3、(,)不匹配

4、「」,『』不匹配

這個是********************=

$num=$this->executequery("delete from resultlist where id=".$id); if($num==1) return true; else return false;

如果你的源**被出來,要麼你的php環境沒搭好,要麼你用了<? ?>,要是後都的話,請改為<?php ?>即可.

沒整明白***************====

二、事務為啥沒有回滾捏

事務開啟之後,客戶端一開始與伺服器互動,加了一堆鎖,然後突然掛掉了,伺服器一直在等待客戶端發commit或rollback命令,一直到鏈結超時,才會自動回滾

結論:語法錯誤,必須人工保證,而執行時錯誤,php會繼續繼續執行,如果開啟了事務,尤其是全域性事務,要特別小心,如果出現語法錯誤(**質量夠差的,聯調、測試的時候可能出現),或者線上**不小心被人覆蓋**(這個還是有一定的可能的),那就悲劇了,所以若非必要,還是要避免全域性事務,**質量真的很重要

php增加事務 php 事務

標籤 dbhost localhost 3306 mysql伺服器主機位址 dbname test dbuser root mysql使用者名稱 dbpass root mysql使用者名稱密碼 conn mysqli connect dbhost,dbuser,dbpass,dbname if c...

愛由乙個微笑開始

愛由乙個微笑開始,用乙個吻來成長,用一滴淚去結束 當你愛上乙個人而不被對方所愛,是一件很傷害的事。但最痛苦的莫過你愛乙個人而卻沒有勇氣讓他知道你的感受。最好的朋友是那一種能夠讓你坐在鞦韆上,不發一言,然後靜靜地一起離開,感覺就是從未有過最好的對話。這是真實的 你永不知道你得到了什麼直至你失去了的時候...

Oracle事務的開始與結束

事務是用來分割資料庫活動的邏輯工作單元,事務即有起點,也有終點 當下列事件之一發生時,事務就開始了 連線到資料庫上,並執行了第一天 dml 語句 當前乙個事務結束後,又輸入了另外一條 dml 語句 當下列事件之一發生時,事務就結束了 執行 commit 或 rollback語句 執行一條 dll語句...