現在、ある時点で 100 個の相互依存クエリを起動する必要があるシステムを開発しています。
私のスクリプト(現在実行中)では、
$query1 = mysql_query("INSERT_QUERY_STRING");
if(!$query) {
die('error'.mysql_error());
}
//this loop can be turn more than 100 times
while(CONDITION) {
//query generated here
$query2 = mysql_query("UPDATE_QUERY_STRING");
$query3 = mysql_query("UPDATE_QUERY_STRING");
$query4 = mysql_query("UPDATE_QUERY_STRING");
$query5 = mysql_query("UPDATE_QUERY_STRING");
if(!$query2 || !$query3 || !$query4 || !$query5) {
die('error '.mysql_error());
}
}
$query6 = mysql_query("UPDATE_QUERY_STRING");
if(!$query6) {
die('error '.mysql_error());
}
構文エラーを無視します。これは単なるロジックです
問題は、すべてのクエリが相互に依存しているため、いずれかが失敗した場合、以前に発生したすべての変更を取り消す必要があることです。MYSQL TRANSACTION、COMMIT、ROLLBACK を使用する 1 つのソリューションを知っています。これが私が考え出したことです(これを行う予定です)、
$processes = array();
$processes[] = "INSERT_QUERY_STRING"; //query1
//this loop can be turn more than 100 times
while(CONDITION) {
//query generated here
$processes[] = "UPDATE_QUERY_STRING"; //looping queries
}
$processes[] = "UPDATE_QUERY_STRING" //last query
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");
$error = false;
for($i=0;$i < count($processes) ; $i++)
{
$q = mysql_query($processes[$i]);
if(!$q) {
$error = true;
break;
}
}
if($error == false) {
mysql_query("COMMIT");
}
else {
mysql_query("ROLLBACK");
}
私のソリューションは良い/最高ですか? 同じことをより迅速かつ効果的に行う他の解決策はありますか? ありがとう。