如何使用PHP的事务插入两个表


how to insert into two tables using php with transaction?

我知道用一个查询插入多个表是不可能的,

现在我试图插入2表与php使用START TRANSACTION,但它不工作。

我的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");

update:如果你正在使用面向对象的方式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);,而不是

代替

if($insert1 && $insert2)

命名为"insert",然后:

if ($insert->affected_rows > 0)