php - 如何使用带事务的 php 插入到两个表中?

标签 php mysql sql mysqli

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

现在我正尝试使用 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/

相关文章:

HTML 和 PHP,创建包含两列的 HTML 电子邮件

php - 查询中的 pdo 多个数据库连接

php - 合并2个表字段并插入到同一记录中的另一个字段

php - Opencart 显示最低期权价格

SQL:CASE 语句中使用的别名列名

SQL "Where Not Exists"未返回任何行

MySQL:如何在 SQL 查询中为每个结果插入一条记录?

php - CakePHP:在 HABTM 中保存数据的正确格式是什么

javascript - 在 JavaScript 中运行 for 循环的问题

php - 应用上下文 php 中的 hashmap