您在使用mysqli autocommit时遇到了问题。以下是相关查询。
Table1和Table3是InnoDB,而Table2是MyISAM
成功插入了Table2和Table3的数据,但是无法存储数据到Table1中。 在运行代码时没有出现任何错误。
$dbconnect->autocommit(false);
$stmt = $dbconnect->prepare("INSERT INTO `table1`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val1,$val2);
$stmt->execute();
$dbconnect->rollback();
$stmt = $dbconnect->prepare("INSERT INTO `table2`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val3,$val4);
$stmt->execute();
$dbconnect->rollback();
$stmt = $dbconnect->prepare("INSERT INTO `table3`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val5,$val6);
$stmt->execute();
$dbconnect->commit();
何时以及如何使用autocommit(false)和rollback()呢?
使用autocommit(false)可以在执行多个SQL语句时将它们作为一个事务来处理,直到使用commit()将更改保存到数据库。而如果需要回滚之前对数据库所做的所有更改,则可以使用rollback()函数。
commit
用于提交事务,而rollback
用于回滚事务。那么true
和false
的自动提交参数呢?手册上说“是否打开自动提交”。那么将其设置为false
就是关闭自动提交吗? - Jo E.try
结束时使用$dbconnect->autocommit(true)
。 - Lithilioncommit
然后再打开autocommit(true)
更好吗? - Lithilion