在循環代碼的經典交易:PHP編寫的語句和事務在一個循環
$mysqli->query("START TRANSACTION");
foreach ($pdata as $key => $value) {
$sql = "INSERT INTO temp (`fund_id`) VALUES (" . $value . ")";
$result = $mysqli->query($sql);
}
$mysqli->query("COMMIT");
然後我們切換到準備好的發言:
$mysqli->autocommit(FALSE);
foreach ($pdata as $key => $value) {
$sql = "INSERT INTO temp (`fund_id`) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i', $value);
$stmt->execute();
}
$mysqli->commit();
問題:
1)這些是兩個代碼相同?我是否在準備好的陳述中遺漏了第二個代碼中的內容?
2)是$mysqli->commit()
是否與$mysqli->query("COMMIT")
相同?
3)我是否需要爲已準備好的語句塊添加$mysqli->query("START TRANSACTION");
或者當我們設置autocommit(FALSE)
時事務會自動啓動?
在您關閉自動提交後,您不需要「開始交易」。你可以''mysqli-> prepare()'_before_你的循環,然後在'foreach'循環中執行()它。在每次循環迭代中不需要「準備()」它。 –
每次你都不需要'bind_param()'。它綁定對變量的引用,所以每次執行它都會使用變量的當前值。 – Barmar