今天有同事碰到乙個問題,說是開事務了,然後在中間有個地方因為**的原因中斷了,結果資料庫就堵在**了。
一、首先,同事說是因為中間**有錯誤,就會停止執行。於是我寫了一段**
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語句...