有没有办法用预备语句进行交易?
我的意思是我可以将以下示例与$mysqli->autocommit(FALSE);
和$mysqli->commit( );
以及$mysqli->rollback( );
//Preparing the statment
$insert_stmt=$mysqli->prepare("INSERT INTO x VALUES(?,?)")
or die($mysqli->error);
//associate variables with the input parameters
$insert_stmt->bind_param("is", $my_number,$my_string); //i=integer
//Execute the statement multiple times....
for ($my_number = 1; $my_number <= 10; $my_number++)
{
$my_string="row ".$my_number;
$insert_stmt->execute() or die ($insert_stmt->error);
}
$insert_stmt->close();
我环顾四周但找不到使用预准备语句(不是PDO)的任何示例: http://php.net/manual/en/mysqli.prepare.php对于事务,我只找到这里提到的例子:http://book.opensourceproject.org.cn/lamp/mysql/mysqlstored/opensource/0596100892/mysqlspp-chp-13-sect-2.html其中事务和预处理语句从不混合。
将它们一起使用会不合适?
答案 0 :(得分:7)
准备好的陈述和交易是不相关的技术和技术。
您可能希望直接发出START TRANSACTION
和COMMIT
/ ROLLBACK
命令,而不是使用专用方法。它们在功能上是等价的。
对于你的循环,你需要在START TRANSACTION
之前发出prepare
,然后在循环退出后发出COMMIT
。在准备好的语句启动之后但在执行之前,您可能不应该尝试打开事务。
出于某种原因,他们没有添加“启动事务”命令,而是支持关闭自动提交。关于mysqli的一些奇怪的事情让我总是推荐PDO。 :)打开一个事务会隐式关闭事务持续时间的自动提交。