pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

    • <bdo id='GdkbP'></bdo><ul id='GdkbP'></ul>
    <i id='GdkbP'><tr id='GdkbP'><dt id='GdkbP'><q id='GdkbP'><span id='GdkbP'><b id='GdkbP'><form id='GdkbP'><ins id='GdkbP'></ins><ul id='GdkbP'></ul><sub id='GdkbP'></sub></form><legend id='GdkbP'></legend><bdo id='GdkbP'><pre id='GdkbP'><center id='GdkbP'></center></pre></bdo></b><th id='GdkbP'></th></span></q></dt></tr></i><div class="j5dtznf" id='GdkbP'><tfoot id='GdkbP'></tfoot><dl id='GdkbP'><fieldset id='GdkbP'></fieldset></dl></div>

    <small id='GdkbP'></small><noframes id='GdkbP'>

    <legend id='GdkbP'><style id='GdkbP'><dir id='GdkbP'><q id='GdkbP'></q></dir></style></legend><tfoot id='GdkbP'></tfoot>

      1. 如何 mysqli::commit &amp;mysqli::回滾工作?

        How does mysqli::commit amp; mysqli::rollback work?(如何 mysqli::commit amp;mysqli::回滾工作?)

            <tbody id='Mlx31'></tbody>
          <tfoot id='Mlx31'></tfoot>
              <bdo id='Mlx31'></bdo><ul id='Mlx31'></ul>
              <legend id='Mlx31'><style id='Mlx31'><dir id='Mlx31'><q id='Mlx31'></q></dir></style></legend>
              • <i id='Mlx31'><tr id='Mlx31'><dt id='Mlx31'><q id='Mlx31'><span id='Mlx31'><b id='Mlx31'><form id='Mlx31'><ins id='Mlx31'></ins><ul id='Mlx31'></ul><sub id='Mlx31'></sub></form><legend id='Mlx31'></legend><bdo id='Mlx31'><pre id='Mlx31'><center id='Mlx31'></center></pre></bdo></b><th id='Mlx31'></th></span></q></dt></tr></i><div class="vtzrnz5" id='Mlx31'><tfoot id='Mlx31'></tfoot><dl id='Mlx31'><fieldset id='Mlx31'></fieldset></dl></div>

                <small id='Mlx31'></small><noframes id='Mlx31'>

                  本文介紹了如何 mysqli::commit &amp;mysqli::回滾工作?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我已經閱讀了在線 php 手冊,但我仍然不確定這兩個函數的工作方式:mysqli::commit &mysqli::回滾.

                  I've read the online php manual but I'm still not sure of the way these two functions work: mysqli::commit & mysqli::rollback.

                  我要做的第一件事是:

                  $mysqli->autocommit(FALSE);
                  

                  然后我提出一些疑問:

                  $mysqli->query("...");
                  $mysqli->query("...");
                  $mysqli->query("...");
                  

                  然后我通過執行以下操作提交由這 3 個查詢組成的事務:

                  Then I commit the transaction consisting of these 3 queries by doing:

                  $mysqli->commit();
                  

                  但是,在這些查詢之一不起作用的不幸情況下,是所有 3 個查詢都被取消還是我必須自己調用回滾?我希望所有 3 個查詢都是原子的,并且只被視為一個查詢.如果一個查詢失敗,那么所有 3 個查詢都應該失敗并且沒有任何效果.

                  BUT in the unfortunate case in which one of these queries does not work, do all 3 queries get cancelled or do I have to call a rollback myself? I want all 3 queries to be atomic and be considered as only one query. If one query fails then all 3 should fail and have no effect.

                  我問這個是因為在我在手冊頁上看到的評論中:http://php.net/manual/en/mysqli.commit.php如果其中一個查詢失敗,用戶 Lorenzo 會調用回滾.

                  I'm asking this because in the comments I've seen on the manual page: http://php.net/manual/en/mysqli.commit.php the user Lorenzo calls a rollback if one of the queries failed.

                  如果 3 個查詢是原子的,回滾有什么好處?我不明白.

                  What's a rollback good for if the 3 queries are atomic? I don't understand.

                  這是我懷疑的代碼示例:

                  This is the code example I am doubtful about:

                  <?php 
                  $all_query_ok=true; // our control variable 
                  $mysqli->autocommit(false);
                  //we make 4 inserts, the last one generates an error 
                  //if at least one query returns an error we change our control variable 
                  $mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false; 
                  $mysqli->query("INSERT INTO myCity (id) VALUES (200)") ? null : $all_query_ok=false; 
                  $mysqli->query("INSERT INTO myCity (id) VALUES (300)") ? null : $all_query_ok=false; 
                  $mysqli->query("INSERT INTO myCity (id) VALUES (100)") ? null : $all_query_ok=false; //duplicated PRIMARY KEY VALUE 
                  
                  //now let's test our control variable 
                  $all_query_ok ? $mysqli->commit() : $mysqli->rollback(); 
                  
                  $mysqli->close(); 
                  ?>
                  

                  我認為這段代碼是錯誤的,因為如果任何查詢失敗并且 $all_query_ok==false 那么你不需要回滾,因為事務沒有被處理.我說得對嗎?

                  I think this code is wrong because if any of the queries failed and $all_query_ok==false then you don't need to do a rollback because the transaction was not processed. Am I right?

                  推薦答案

                  我認為這段代碼是錯誤的,因為如果任何查詢失敗并且$all_query_ok==false 那么你不需要回滾,因為交易未處理.我說得對嗎?

                  I think this code is wrong because if any of the queries failed and $all_query_ok==false then you don't need to do a rollback because the transaction was not processed. Am I right?

                  不,如果單個 SQL 語句失敗,事務不會跟蹤.

                  No, the transaction does not keep track if a single SQL-Statement fails.

                  如果單個 SQL 語句失敗,則 語句 將回滾(如@eggyal 的回答中所述) - 但 事務 仍處于打開狀態.如果您現在調用 commit,則不會回滾成功的語句,您只是將損壞的"數據插入到數據庫中.您可以輕松重現這一點:

                  If a single SQL-Statement fails the statement is rolled back (like it is described in @eggyal's Answer) - but the transaction is still open. If you call commit now, there is no rollback of the successful statements and you just inserted "corrupted" data into your database. You can reproduce this easily:

                  m> CREATE TABLE transtest (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
                   name VARCHAR(100) NOT NULL DEFAULT '',
                   CONSTRAINT UNIQUE KEY `uq_transtest_name` (name)) ENGINE=InnoDB;
                  Query OK, 0 rows affected (0.07 sec)
                  
                  m> START TRANSACTION;
                  Query OK, 0 rows affected (0.00 sec)
                  
                  m> INSERT INTO transtest (name) VALUE ('foo');
                  Query OK, 1 row affected (0.00 sec)
                  
                  m> INSERT INTO transtest (name) VALUE ('foo');
                  ERROR 1062 (23000): Duplicate entry 'foo' for key 'uq_transtest_name'
                  
                  m> INSERT INTO transtest (name) VALUE ('bar');
                  Query OK, 1 row affected (0.00 sec)
                  
                  m> COMMIT;
                  Query OK, 0 rows affected (0.02 sec)
                  
                  m> SELECT * FROM transtest;
                  +----+------+
                  | id | name |
                  +----+------+
                  |  3 | bar  |
                  |  1 | foo  |
                  +----+------+
                  2 rows in set (0.00 sec)
                  

                  您會看到foo"和bar"的插入成功,盡管第二個 SQL 語句失敗了 - 您甚至可以看到 AUTO_INCREMENT 值已被錯誤查詢增加.

                  You see that the insertion of 'foo' and 'bar' were successful although the second SQL-statement failed - you can even see that the AUTO_INCREMENT-value has been increased by the faulty query.

                  因此您必須檢查每個 query 調用的結果,如果失敗,則調用 rollback 以撤消否則成功的查詢.所以洛倫佐在 PHP 手冊中的代碼是有道理的.

                  So you have to check the results of each query-call and if one fails, call rollback to undo the otherwise successful queries. So Lorenzo's code in the PHP-manual makes sense.

                  強制 MySQL 回滾事務的唯一錯誤是事務死鎖"(這是特定于 InnoDB 的,其他存儲引擎可能會以不同的方式處理這些錯誤).

                  The only error which forces MySQL to roll back the transaction is a "transaction deadlock" (and this is specific to InnoDB, other storage engines may handle those errors differently).

                  這篇關于如何 mysqli::commit &amp;mysqli::回滾工作?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                  PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標不起作用)
                  PHP PDO ODBC connection(PHP PDO ODBC 連接)
                  Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術方法)
                  php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                  MSSQL PDO could not find driver(MSSQL PDO 找不到驅動程序)
                        • <bdo id='xAwv6'></bdo><ul id='xAwv6'></ul>

                          <legend id='xAwv6'><style id='xAwv6'><dir id='xAwv6'><q id='xAwv6'></q></dir></style></legend>
                          <i id='xAwv6'><tr id='xAwv6'><dt id='xAwv6'><q id='xAwv6'><span id='xAwv6'><b id='xAwv6'><form id='xAwv6'><ins id='xAwv6'></ins><ul id='xAwv6'></ul><sub id='xAwv6'></sub></form><legend id='xAwv6'></legend><bdo id='xAwv6'><pre id='xAwv6'><center id='xAwv6'></center></pre></bdo></b><th id='xAwv6'></th></span></q></dt></tr></i><div class="bvndjvf" id='xAwv6'><tfoot id='xAwv6'></tfoot><dl id='xAwv6'><fieldset id='xAwv6'></fieldset></dl></div>

                            <small id='xAwv6'></small><noframes id='xAwv6'>

                            <tfoot id='xAwv6'></tfoot>
                              <tbody id='xAwv6'></tbody>
                            主站蜘蛛池模板: 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 巨野月嫂-家政公司-巨野县红墙安康母婴护理中心 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 泥沙分离_泥沙分离设备_泥砂分离机_洛阳隆中重工机械有限公司 | 杭州ROHS检测仪-XRF测试仪价格-百科 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 高压负荷开关-苏州雷尔沃电器有限公司 |