【问题标题】:How to execute multiple MySql query at same time?如何同时执行多个 MySql 查询?
【发布时间】:2019-01-26 08:47:50
【问题描述】:

我想更新我的数据,我使用它但它不会更新我的数据,id 仍然为空。那么,如何同时执行多个 SQL 查询呢?

$mysqli = new mysqli("a", "a", "a", "a");

if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$sql = "UPDATE laporan_gini SET id_provinsi='1' WHERE nama_item_vertical_variabel= 'INDONESIA'";
$sql = "UPDATE laporan_gini SET id_provinsi='61' WHERE nama_item_vertical_variabel= 'KALIMANTAN BARAT'";

if (!$mysqli->multi_query($sql)) {
    echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

do {
    if ($res = $mysqli->store_result()) {
        var_dump($res->fetch_all(MYSQLI_ASSOC));
        $res->free();
    }
} while ($mysqli->more_results() && $mysqli->next_result());

【问题讨论】:

  • $sql 将只包含一个查询,因为您将其覆盖...
  • 如果你想改变id字段的值,你应该把它添加到你的查询中

标签: php mysql mysqli mysqli-multi-query multi-query


【解决方案1】:

你不应该使用mysqli::multi_query() 来执行你的SQL,因为这个函数不支持参数绑定。您必须使用准备好的语句分别执行这两个查询。如果您不打算将任何数据绑定到 SQL,则可以将其减少一行并改用 mysqli::query()

如果两个查询相互依赖,那么您可以将它们包装在一个事务中(假设您的表引擎支持事务)。

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("a", "a", "a", "a");
$mysqli->set_charset('utf8mb4'); // always set the charset

// start transaction
$mysqli->begin_transaction();

$sql = "UPDATE laporan_gini SET id_provinsi='1' WHERE nama_item_vertical_variabel= 'INDONESIA'";
$stmt = $mysqli->prepare($sql);
$stmt->execute();

$sql = "UPDATE laporan_gini SET id_provinsi='61' WHERE nama_item_vertical_variabel= 'KALIMANTAN BARAT'";
$stmt = $mysqli->prepare($sql);
$stmt->execute();

// commit data and end transaction
$mysqli->commit();

【讨论】:

    【解决方案2】:

    最好的方法是使用sql触发器或存储过程:
    https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
    https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html

    其他方式你可以在代码中运行它:

    <?php
    $mysqli = new mysqli("example.com", "user", "password", "database");
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }
    
    if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli->query("CREATE TABLE test(id INT)")) {
        echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    
    $sql = "SELECT COUNT(*) AS _num FROM test; ";
    $sql.= "INSERT INTO test(id) VALUES (1); ";
    $sql.= "SELECT COUNT(*) AS _num FROM test; ";
    
    if (!$mysqli->multi_query($sql)) {
        echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    
    do {
        if ($res = $mysqli->store_result()) {
            var_dump($res->fetch_all(MYSQLI_ASSOC));
            $res->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 2020-08-03
      • 2020-09-11
      • 1970-01-01
      • 2012-07-21
      • 2018-05-20
      • 2018-04-04
      相关资源
      最近更新 更多