我制作了一个 PHP 类,它将一些数据写入许多表中。我调用一些 PHP 函数将一些“标签”(更具体的 4 个标签)写入表中。函数名称因要写入的标签名称和表名称而异,因此我将这些函数保存到已注册的数组变量中,并使用这些变量名称调用这些函数。
由于我使用过AUTOCOMMIT=0
,我认为如果我没有放入 COMMIT 语句,这些函数将永远不会写入表,但事实是它写入了 1 个没有 COMMIT 语句的第一个标签(它根本不应该写入表)。
我检查了这些表,它们绝对在使用 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");