我知道用单个查询插入多个表是不可能的,
现在我正尝试使用 START TRANSACTION
将 php 插入到 2 个表中,但它不起作用。
我的sql查询看起来像
mysqli_query($con,"START TRANSACTION
INSERT INTO users VALUES ('', '$getuser', '$getpass', '$getemail', '$fname', '$lname', '$domain', '$address1', '$address2', '$city', '$country', '$region', '$zip', '$phone', '$getplan', '$duration', '$getprice', '', '0', '0', '$code', '$date', '$time','0', '', '')
INSERT INTO domains (username) VALUES ('$getuser') COMMIT");
那么问题出在哪里呢??
非常感谢。
最佳答案
因为mysqli_query
每次只能处理一个命令。像这样拆分它们:
mysqli_query($con, "SET AUTOCOMMIT=0");
mysqli_query($con,"START TRANSACTION");
$insert1 = mysqli_query($con,"INSERT INTO users VALUES ('', '$getuser', '$getpass', '$getemail', '$fname', '$lname', '$domain', '$address1', '$address2', '$city', '$country', '$region', '$zip', '$phone', '$getplan', '$duration', '$getprice', '', '0', '0', '$code', '$date', '$time','0', '', '')");
$insert2 = mysqli_query($con,"INSERT INTO domains (username) VALUES ('$getuser')");
if($insert1 && $insert2) {
mysqli_query($con,"COMMIT");
} else {
mysqli_query($con,"ROLLBACK");
}
mysqli_query($con, "SET AUTOCOMMIT=1");
更新:如果您以面向对象的方式使用 mysqli,您可以执行以下操作:
$mysqli->begin_transaction();
$insert1 = $mysqli->query("INSERT INTO users VALUES ('', '$getuser', '$getpass', '$getemail', '$fname', '$lname', '$domain', '$address1', '$address2', '$city', '$country', '$region', '$zip', '$phone', '$getplan', '$duration', '$getprice', '', '0', '0', '$code', '$date', '$time','0', '', '')");
$insert2 = $mysqli->query("INSERT INTO domains (username) VALUES ('$getuser')");
if($insert1 && $insert2) {
$mysqli->commit();
} else {
$mysqli->rollback();
}
提示:如果您使用较旧的 PHP 版本 5.5.0,则不能使用 $mysqli->begin_transaction();
而必须使用 $mysqli->autocommit(false);
在开头,$mysqli->autocommit(true);
在结尾
关于php - 如何使用带事务的 php 插入到两个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25263500/