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)
?
回答:
可以通过将prepare
and bind_param
语句拉出循环来优化循环。
$value = null;$mysqli->autocommit(FALSE);
$sql = "INSERT INTO temp (`fund_id`) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i', $value);
foreach ($pdata as $value) {
$stmt->execute();
}
$mysqli->commit();
您已经关闭了行自动提交功能,autocommit(FALSE)
因此不需要使用该START TRANSACTION
语句。
以上是 PHP在循环中准备语句和事务 的全部内容, 来源链接: utcz.com/qa/430265.html