いくつかのデータをいくつかのテーブルに書き込む PHP クラスを作成しました。いくつかの "ラベル" (より具体的には 4 つのラベル) をテーブルに書き込むために、いくつかの PHP 関数を呼び出します。書き込むラベル名やテーブル名によって関数名が異なっていたので、これらの関数を登録済みの配列変数に保存し、これらの変数名を使ってこれらの関数を呼び出しました。
私が使用したのでAUTOCOMMIT=0
、COMMITステートメントを入れないとこれらの関数がテーブルに書き込まれないと思っていましたが、実際にはCOMMITステートメントなしで最初のラベルを1つ書き込みます(テーブルはまったく書き込まれないはずです)。
テーブルを確認したところ、それらは完全に InnoDB を使用していました。また、mysql コンソールを使用して行ったいくつかのコミット/ロールバック テストは、通常の動作のままです (通常どおりにコミット/ロールバックされます)。
ここで見逃したものや間違っているものはありますか? または、この問題を解決するためのリンク/リソースを教えてください。
どうもありがとうございました。
ここに、動的関数呼び出しを含む php コードを配置します。
mysql_query("SET AUTOCOMMIT=0", $conn) or die(toAlert(mysql_error() . " on " . __FUNCTION__ . " line " . __LINE__ . " file " . __FILE__));
mysql_query("START TRANSACTION", $conn) or die(toAlert(mysql_error() . " on " . __FUNCTION__ . " line " . __LINE__ . " file " . __FILE__));
if (count($this->parentEntries) > 0) {
foreach ($this->accounts as $label => $labelSrc) {
echo "$label: $labelSrc\n";
$_label = $label;
$_companyID = $this->companyID;
$_outletID = $this->outlet2ID;
$_tgl = $this->tgl;
$_bln = $this->bln;
$_thn = $this->thn;
$_jml = $this->parentEntries[$labelSrc]['qty'];
$_nilai = $this->parentEntries[$labelSrc]['value'];
$_jmlnota = 1;
switch ($this->peopleLabel) {
case "Supplier":
$_supplierID = $this->peopleID;
break;
case "Customer":
$_customerID = $this->peopleID;
break;
default:
break;
}
include "RegisterPBUFunctions.php";
foreach ($this->parentRels as $relName) {
$doYourJob = $arrPBUFunctions[$relName](
$arrPBUParams[$relName][0],
$arrPBUParams[$relName][1],
$arrPBUParams[$relName][2],
$arrPBUParams[$relName][3],
$arrPBUParams[$relName][4],
$arrPBUParams[$relName][5],
$arrPBUParams[$relName][6],
$arrPBUParams[$relName][7],
$arrPBUParams[$relName][8],
$arrPBUParams[$relName][9],
$arrPBUParams[$relName][10],
$arrPBUParams[$relName][11],
$arrPBUParams[$relName][12],
$arrPBUParams[$relName][13]
) or die("error on " . __FILE__ . " line " . __LINE__);
}
}
}
//$doApply = (mysql_query("COMMIT", $conn)) or die("Failed to apply transaction");