如何使用php与事务插入两个表?

hsn*_*331 5 php mysql sql mysqli

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

现在我试图使用php插入2个表,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");
Run Code Online (Sandbox Code Playgroud)

那么问题出在哪里?

提前谢谢了.

chr*_*sse 5

这是因为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");
Run Code Online (Sandbox Code Playgroud)

更新:如果您使用mysqli以objectorientated方式,您可以执行以下操作:

$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();
}
Run Code Online (Sandbox Code Playgroud)

提示:如果您使用较旧的PHP版本为5.5.0,则不能使用$mysqli->begin_transaction();并且必须$mysqli->autocommit(false);在开头和$mysqli->autocommit(true);结尾使用