我试图弄清楚如何将 sql 事务与 mysqli 准备好的语句一起使用。我找不到任何使用多个准备好的语句(不是 OO)的示例,所以我不确定如何使用它们的事务。这是我能想到的最接近的:
mysqli_autocommit($database, FALSE);
$transferq = 'INSERT INTO money (user_id, bank, onhand, type, amount, source) VALUES (?, ?, ?, ?, ?, ?)';
$transferstmt = mysqli_stmt_init($database);
mysqli_stmt_prepare($transferstmt, $transferq);
mysqli_stmt_bind_param($transferstmt, 'iiisis', $userid, $newbank, $newmoney, $type, $amount, $source);
mysqli_stmt_execute($transferstmt);
$insertq = 'UPDATE users SET money=?, bank=? WHERE user_id=' . $userid . ' LIMIT 1';
$insertstmt = mysqli_stmt_init($database);
mysqli_stmt_prepare($insertstmt, $insertq);
mysqli_stmt_bind_param($insertstmt, 'ii', $newmoney, $newbank);
mysqli_stmt_execute($insertstmt);
mysqli_commit($database);
但是,我不知道这是否可行。不过,我最大的问题是我不确定如何检查查询是否失败(以及是否提交)。我看到了一个我认为做了类似的例子
if(mysqli_stmt_execute($stmt)){
mysqli_commit($database);
}else{
mysqli_rollback($database);
}
但我不能真正做到这一点,因为我有多个准备好的语句要执行。
这应该如何工作?