PHP Mysqli - 将事务埋在单个查询中


php mysqli - burying transactions in a single query

MySQli一直声明我的"组合"查询的第一个选择部分存在语法错误,如下所示:

$my_massive_query =
    'START TRANSACTION WITH CONSISTENT SNAPSHOT;
    SELECT d.id AS `Location ID`, ...
    SELECT d.id AS `Location ID`, ...
    SELECT d.id AS `Location ID`, ...
    SELECT d.id AS `Location ID`, ...
    SELECT d.id AS `Location ID`, ...
    COMMIT';
$mysqli->query($my_massive_query);

这在 php 中是"不允许的"吗?是否必须使用mysqli函数,如下所示:

$mysqli->autocommit(FALSE);
$mysqli->query("SELECT ...");
$mysqli->query("SELECT ...");
$mysqli->query("SELECT ...");
$mysqli->commit();

我已经在 mysql 中执行了查询(在使用 var_dump 按原样获取它之后),并且它执行得很好,所以我认为真的不存在语法问题,也许不允许将查询"组合"在一个字符串中?

我担心START TRANSACTION WITH CONSISTENT SNAPSHOT;有一些额外的条件,仅将自动提交设置为 false 将无法满足这些条件。

mysqli::query 一次只能处理 1 个查询。要在一个字符串中执行多个查询,请使用 mysqli::multi_query。

使用 API 函数,您可以在控制台中执行所有操作。
但是,必须单独调用每个命令。这是非常简单的规则

$mysqli->query("START TRANSACTION WITH CONSISTENT SNAPSHOT");
$mysqli->query("SELECT ...");
$mysqli->query("SELECT ...");
$mysqli->query("COMMIT");