PHP MySQL InnoDB Несколько вставок в разные таблицы с помощью транзакций не удалось

Я изучал транзакции, и из того, что я понимаю, должно работать несколько операторов вставки.

Я использую движок InnoDB. Оба нижеприведенных оператора вставки работают и правильно вводят данные в соответствующие таблицы, но только если в транзакции одновременно используется один из них, а не оба вместе.

Может кто-нибудь сказать мне, что мне нужно сделать по-другому?

Это не с Affected rows (INSERT): -1

код:

$con->begin_transaction();

$con->autocommit(FALSE);


$query = "
INSERT INTO `Order` (`PO`,`SellingManagerSalesRecordNumber`,`OrderID`,
`AmountPaid`,`CreatedTime`,`Subtotal`,`Total`,`BuyerUserID`,
`IsMultiLegShipping`,`Status_id`,`SellerUserID_id`)
VALUES
('AF11514','11514','111809902234-1906167668001','55.98',
'2019-01-07 17:42:46','55.98','55.98','hyccas3','false',
(SELECT `id` FROM `Status` WHERE `Status` = 'Completed'),
(SELECT `id` FROM `SellerUserID` WHERE `SellerUserID` = 'afiperformance'))
ON DUPLICATE KEY UPDATE PO = VALUES(PO),
SellingManagerSalesRecordNumber = VALUES(SellingManagerSalesRecordNumber),
OrderID = VALUES(OrderID),
AmountPaid = VALUES(AmountPaid),
CreatedTime = VALUES(CreatedTime), Subtotal = VALUES(Subtotal),
Total = VALUES(Total),
BuyerUserID = VALUES(BuyerUserID),
IsMultiLegShipping = VALUES(IsMultiLegShipping);

INSERT INTO `CheckoutStatus` (`PO`,`LastModifiedTime`,
`PaymentMethod_id`,`Status_id`)
VALUES ('AF11514','2019-01-07 17:47:55',
(SELECT `id` FROM `PaymentMethod` WHERE `PaymentMethod` = 'PayPal'),
(SELECT `id` FROM `Status` WHERE `Status` = 'Complete'))
ON DUPLICATE KEY UPDATE PO = VALUES(PO),
LastModifiedTime = VALUES(LastModifiedTime);";

echo $query;

$con->query($query);
printf("<br><br>\n\nAffected rows (INSERT): %d ", $con->affected_rows) . "\n\n<br><br>";

if ($con->affected_rows == -1) {
echo "<br><br>\n\n Failed " . "\n\n<br><br>";
$con->rollback();
$commit = '';
} else {
$commit = $con->commit();
echo " success " . "\n\n<br><br>";
}

/* commit transaction */
if ($commit == '') {
print("Transaction commit failed\n");
} else {
print("Transaction commit success\n");
}

$con->close();

1

Решение

mysqli_query не поддерживает несколько запросов за один звонок. Вам либо нужно использовать mysqli_multi_query или разделить запрос на два отдельных вызова mysqli_query, Поскольку вы используете транзакции, разделение на два вызова было бы лучше, так как трудно получить информацию об ошибках для второго и последующих запросов в mysqli_multi_query,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]