MySQLi准备语句和事务

Yer*_*rel 8 php mysql mysqli transactions 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();
Run Code Online (Sandbox Code Playgroud)

我环顾四周但找不到任何使用预处理语句的例子(不是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其中事务和准备语句从不相互混合.

将它们一起使用会有误吗?

Cha*_*les 7

准备好的报表和交易是不相关的技术和技术.

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

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

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

  • 天哪,这对我很有帮助.我做了一个脚本,"INSERT"〜5000行,花了好几个小时才完成.添加`$ mysqli-> autocommit(FALSE);`和`$ mysqli-> commit();`使它在几分钟内运行!:-) (2认同)