MySQLi准备语句和事务

时间:2011-03-20 23:47:46

标签: php mysql transactions mysqli prepared-statement

有没有办法用预备语句进行交易?

我的意思是我可以将以下示例与$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其中事务和预处理语句从不混合。

将它们一起使用会不合适?

1 个答案:

答案 0 :(得分:7)

准备好的陈述和交易是不相关的技术和技术。

您可能希望直接发出START TRANSACTIONCOMMIT / ROLLBACK命令,而不是使用专用方法。它们在功能上是等价的。

对于你的循环,你需要在START TRANSACTION 之前发出prepare ,然后在循环退出后发出COMMIT。在准备好的语句启动之后但在执行之前,您可能不应该尝试打开事务。

出于某种原因,他们没有添加“启动事务”命令,而是支持关闭自动提交。关于mysqli的一些奇怪的事情让我总是推荐PDO。 :)打开一个事务会隐式关闭事务持续时间的自动提交。