我做了一个PHP类,它将一些数据写入多个表中。 我调用一些PHP函数将一些“标签”(4个标签,更具体)写入表格中。函数名称根据要写入的标签名称和表名称而不同,因此我将这些函数保存到了已注册的数组变量中,并且使用这些变量名称调用了这些函数。因为我使用了AUTOCOMMIT=0
,我认为如果我没有放置COMMIT语句,这些函数将永远不会写入表中,但事实上它会写入1个没有COMMIT语句的第一个标签(它应该根本不写表) 。InnoDB Uncommited但书面(使用动态函数名称的PHP)
我检查了表,他们绝对使用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");
难道说一个不相关的查询在这之后又犯了什么,而这一切都随之而来? – 2013-03-23 12:57:51
马特,不,我没有任何其他查询,除了我放在那里。谢谢。 – 2013-03-23 13:19:17