PHP MySQL 事务捕获错误
PHP MySQL Transaction catch error
我已经找了两天了,还是没有找到答案。假设我在 PHP:
中有下面的代码
$mysqli->begin_transaction();
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=1");
mysqli_query($mysqli, "DELETE FROM TEST WHEREE ID=2"); <-- THIS ONE WILL FAIL BECAUSE OF TYPO
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=3");
if ($mysqli->commit()) {
//SUCCESS
}
else {
//Failed
$mysqli->rollback();
}
我无法检查事务中的查询是否全部成功,因为当我执行这些查询时,提交函数总是returns true。
如何检查交易中的所有个查询是否成功?
常用方法:
$mysqli->begin_transaction();
try {
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=1");
mysqli_query($mysqli, "DELETE FROM TEST WHEREE ID=2"); <-- THIS ONE WILL FAIL BECAUSE OF TYPO
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=3");
$mysqli->commit();
} catch (\Exception $e) {
// this will show statement with error
echo $e->getMessage();
$mysqli->rollback();
throw $e;
}
您可以使用 mysqli_error 来捕获错误。
$startTrans = 'START TRANSACTION;'; // Starting a mysql transaction
mysqli_query($conn, $startTrans);
$query = 'Insert into students (roll_no,name,class) VALUES (101,"mathew","fourth")';
$result = mysqli_query($conn, $query);
if (mysqli_error($conn)) {
// Rollback can be done here
mysqli_query($conn, "ROLLBACK;"); // All above queries will get rolled back
die(mysqli_error($conn));
} else {
mysqli_query($conn, "COMMIT;"); // changes will get saved to database
}
我已经找了两天了,还是没有找到答案。假设我在 PHP:
中有下面的代码$mysqli->begin_transaction();
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=1");
mysqli_query($mysqli, "DELETE FROM TEST WHEREE ID=2"); <-- THIS ONE WILL FAIL BECAUSE OF TYPO
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=3");
if ($mysqli->commit()) {
//SUCCESS
}
else {
//Failed
$mysqli->rollback();
}
我无法检查事务中的查询是否全部成功,因为当我执行这些查询时,提交函数总是returns true。
如何检查交易中的所有个查询是否成功?
常用方法:
$mysqli->begin_transaction();
try {
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=1");
mysqli_query($mysqli, "DELETE FROM TEST WHEREE ID=2"); <-- THIS ONE WILL FAIL BECAUSE OF TYPO
mysqli_query($mysqli, "DELETE FROM Test WHERE ID=3");
$mysqli->commit();
} catch (\Exception $e) {
// this will show statement with error
echo $e->getMessage();
$mysqli->rollback();
throw $e;
}
您可以使用 mysqli_error 来捕获错误。
$startTrans = 'START TRANSACTION;'; // Starting a mysql transaction
mysqli_query($conn, $startTrans);
$query = 'Insert into students (roll_no,name,class) VALUES (101,"mathew","fourth")';
$result = mysqli_query($conn, $query);
if (mysqli_error($conn)) {
// Rollback can be done here
mysqli_query($conn, "ROLLBACK;"); // All above queries will get rolled back
die(mysqli_error($conn));
} else {
mysqli_query($conn, "COMMIT;"); // changes will get saved to database
}