国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PDO擴展PDO::ATTR_AUTOCOMMIT 出坑記

Binguner / 1113人閱讀

摘要:問題描述我自己以擴展為基礎,封裝了一個異步任務服務器框架,數據庫操作使用擴展,但是在插入數據的時候,出現了異常情況,具體狀況如下表引擎的正常插入,沒有問題表引擎查詢都可以的,但是插入失敗,出現回滾現象,字段變化,表的變化,正常返回解決過程監

問題描述

我自己以swoole擴展為基礎,封裝了一個異步任務服務器框架,數據庫操作使用pdo擴展,但是在插入數據的時候,出現了異常情況,具體狀況如下:

MyISAM 表引擎的insert正常插入,沒有問題

Innodb表引擎查詢都可以的,但是插入失敗,出現回滾現象,auto_increment字段變化,表的rows變化,lastInsertId正常返回

解決過程

監控mysql日志,查看狀態
進入mysql命令行,查看mysql的general-log狀態

show global variables like "%genera%";

如果沒有開啟,執行如下命令

;general_log_file_path修改為自己象牙iode
set global general_log_file="general_log_file_path";
set global general_log=on

然后監控日志,發現insert語句發送到mysql端了

查看innodb engine狀態
懷疑是不是死鎖了,查看innodb 的狀態

 show engine innodb status;

沒有發現異常
到這里,已經有些抓狂了
然后google,各種嘗試,都不得要領

柳暗花明

糾結了挺長時間,后來看到有人說innodb引擎把insert當作一個事物處理,瞬間想到了一個問題,是不是pdo擴展里面,沒有自動提交?
直接寫了個簡單的mysql pdo 連接數據庫,并且插入數據到innodb表里面,結果沒有任何問題,成功了,然后我就想到pdo里面有個參數PDO::ATTR_AUTOCOMMIT,是不是他在作怪?
使用getAttribute(PDO::ATTR_AUTOCOMMIT)) 獲取他的值,打印,發現是1,證明是自動提交事務的
然后在我封裝的框架里面,我打印了他的值,發現是0,問題找到
那么,在插入的時候,如何提交事務?

連接數據庫的時候,options里面設置 PDO::ATTR_AUTOCOMMIT 為 1

插入操作的時候,自己執行commit,顯式的完成一次事務,我采用了這個方法

遺留問題是,同樣的PHP版本,為啥多帶帶的連接 PDO::ATTR_AUTOCOMMIT為1 ,在啟動的swoole-httpserer里面是0,我沒有繼續深入。

總結

解決問題一定要持之以恒,不要放棄,那么問題最終會獲得比較理想的處理結果

另外要注意方法,嘗試不同的思路,我就是一直沒有想到可能是事務自動提交導致的,以至于浪費了很多時間

最后,希望goolge不要被封鎖的這么嚴重,媽的,百度 必應搜索結果完全沒法和google比,程序員,離不開google

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21102.html

相關文章

  • PHP 數據庫操作

    摘要:操作數據庫的種形式使用擴展類庫推薦使用擴展類庫這是類庫的升級版,但已經不推薦使用擴展包含哪三個類與區別可以支持多種數據庫,而且操作方法一致只支持數據庫如何使用連接數據庫什么是如何關閉連接通過來連接數據庫,其中必須傳入數據源名稱數據源名稱是 PHP操作數據庫的2種形式 使用 PDO 擴展類庫(推薦) 使用 Mysqli 擴展類庫(這是Mysql類庫的升級版,但已經不推薦使用) PDO...

    Jingbin_ 評論0 收藏0
  • IndexedDB使用與出坑指南

    摘要:在不指定的情況下,默認版本號為。具體示例如下在需要更新數據庫的模式時,需要更新版本號。此時我們指定一個高于之前版本的版本號,就會觸發事件。數據操作事務在中,我們也能夠使用事務來進行數據庫的操作。 概述 本文通過對IndexedDB的使用方法和使用場景進行相關介紹,對常見的問題進行解答。 同時,因為MDN中的相關文檔缺乏相關邏輯性,所以不容易理解。本文將通過項目中常見的數據存儲和操作需求...

    陳偉 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<