mysql - php中 預先處理與事務同時使用

來源:互聯網
上載者:User
sql1,sql2兩條語句分別插入到不同的表中,sql2某一個屬性就是sql1插入後自增長的ID值。

我希望使用預先處理來處理sql1和sql2, 同時希望他們執行的時候是在一個事務中, 現在問題就是, 事務中沒提交的操作並沒有真的插入到資料庫中, 所以自增長的ID不存在,sql2插入出錯, 腫麽辦?

我現在處理方法就是不啟動事務, 預先處理sql1, 然後max出結果ID, 在預先處理sql2, 一旦sql2出現異常, 根據ID刪掉記錄。 感覺有點麻煩。

其實我主要想知道,例如cnblog, 文章html內容和文章本身屬性應該不是存在一個表中,如果是兩個表, 他們是怎麼處理同時插入和防注入的......

回複內容:

sql1,sql2兩條語句分別插入到不同的表中,sql2某一個屬性就是sql1插入後自增長的ID值。

我希望使用預先處理來處理sql1和sql2, 同時希望他們執行的時候是在一個事務中, 現在問題就是, 事務中沒提交的操作並沒有真的插入到資料庫中, 所以自增長的ID不存在,sql2插入出錯, 腫麽辦?

我現在處理方法就是不啟動事務, 預先處理sql1, 然後max出結果ID, 在預先處理sql2, 一旦sql2出現異常, 根據ID刪掉記錄。 感覺有點麻煩。

其實我主要想知道,例如cnblog, 文章html內容和文章本身屬性應該不是存在一個表中,如果是兩個表, 他們是怎麼處理同時插入和防注入的......

事務中沒提交的操作並沒有真的插入到資料庫中, 所以自增長的ID不存在
上面這句話就是錯的,是有自增id的。

事物和預先處理衝突嗎? 應該不衝突啊。開啟事物,然後正常預先處理,開啟事物後應該也有自增ID吧。最後判斷是否復原。

那你如果不啟用事務,反而是在插入成功之後在執行sql2,那和事務豈不是沒有區別了?

$sql1 = 'update table1 set val=7 where id=5';$dbh->beginTransaction ();$res = $dbh->exec($sql1);if ($res){    //如果執行成功,那麼執行第二條記錄    $res2 = $dbh->exec('update table1 set val=7 where pid='.$res);    if ($res2){        $dbh->commit();    }else{        $dbh->rollback();    }}

不知道這樣對不對~

使用事務就可以了,事務可以做到復原,sql1執行成功了,sql2執行異常,是可以復原的,你可以製造sql2的異常測試下。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.