溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP中執(zhí)行MYSQL事務(wù)怎么解決數(shù)據(jù)寫入不完整等情況

發(fā)布時(shí)間:2021-08-09 12:41:40 來(lái)源:億速云 閱讀:158 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“PHP中執(zhí)行MYSQL事務(wù)怎么解決數(shù)據(jù)寫入不完整等情況”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PHP中執(zhí)行MYSQL事務(wù)怎么解決數(shù)據(jù)寫入不完整等情況”吧!

近來(lái)稍有時(shí)間研究了下MYSQL中的事務(wù)操作,在很多場(chǎng)合下很是適用,譬如在注冊(cè)的時(shí)候需要初始化很多張關(guān)聯(lián)表的時(shí)候,問(wèn)答回復(fù)的時(shí)候需要至少同時(shí)操作兩張表,這些都會(huì)在某些時(shí)候只能成功更新一張表,而另外的SQL語(yǔ)句出現(xiàn)錯(cuò)誤,正常的操作會(huì)導(dǎo)致初始化了一張表 ,其他的都木有能初始化,這個(gè)時(shí)候就會(huì)導(dǎo)致用戶表里的用戶信息已經(jīng)執(zhí)行插入,導(dǎo)致提示注冊(cè)失敗,但是用戶已經(jīng)注冊(cè)了部分信息,這個(gè)時(shí)候需要程序員去數(shù)據(jù)庫(kù)刪除相應(yīng)的數(shù)據(jù)是一個(gè)比較不好的事情。

因此這邊考慮使用事務(wù),事務(wù)可以進(jìn)行模擬SQL操作,當(dāng)所有的SQL都操作成功的時(shí)候才進(jìn)行SQL操作,只要有一個(gè)操作失敗就回滾當(dāng)前事務(wù)的所有SQL操作,避免出現(xiàn)上面描述中出現(xiàn)的數(shù)據(jù)寫入不完整等情況。

下面是鄙人寫的一小段代碼,歡迎大家參考和提出意見(jiàn):

復(fù)制代碼 代碼如下:


/**
* @todo 多條sql的事務(wù)處理
* @param $sqls array
* @return boole true/false
*/
public function doArraySqlActionsTran($password,$sqls){
$db = $this -> doSqlLink($password);//打開(kāi)數(shù)據(jù)庫(kù)鏈接
$db -> autocommit(FALSE);//設(shè)置為不自動(dòng)提交,因?yàn)镸YSQL默認(rèn)立即執(zhí)行
//獲取SQL執(zhí)行結(jié)果數(shù)組
for ($i=0;$i<count($sqls);$i++){
$result[$i] = $db -> query($sqls[$i]);
}
//解析SQL執(zhí)行結(jié)果數(shù)組
for ($j=0;$j<count($result);$j++){
if ($result[$j]==FALSE){
$result[$j]='false';
}else{
$result[$j]='true';
}
}
//查找SQL結(jié)果數(shù)組中是否存在false結(jié)果集
if (in_array('false',$result)){
$sqlResult=FALSE;
}else{
$sqlResult==TRUE;
}
//根據(jù)結(jié)果集進(jìn)行數(shù)據(jù)庫(kù)回滾或者執(zhí)行操作
if ($sqlResult==FALSE){
$db -> rollback();//判斷當(dāng)執(zhí)行失敗時(shí)回滾
$return=FALSE;// 正式環(huán)境中使用
//$return='ROOLBACK';//test 標(biāo)記使用
}else{
$db -> commit();//執(zhí)行事務(wù)s
$return=TRUE;// 正式環(huán)境中使用
//$return='COMMIT';//test 標(biāo)記使用
}
$db->autocommit(true); //設(shè)置為非自動(dòng)提交——事務(wù)處理
$db->close();//關(guān)閉連接
return $return;
}

感謝各位的閱讀,以上就是“PHP中執(zhí)行MYSQL事務(wù)怎么解決數(shù)據(jù)寫入不完整等情況”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PHP中執(zhí)行MYSQL事務(wù)怎么解決數(shù)據(jù)寫入不完整等情況這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI