-2

次の PHP コードを実行しようとしていますが、最初のステートメントだけが正常に実行され、残りのステートメントは実行されません。

<?php

$link = mysqli_connect('localhost', 'root', '');
mysqli_select_db($link, 'database_name');


$update = " UPDATE `temp` SET `price` = 1000 WHERE `id` = 1;
            UPDATE `temp` SET `price` = 2000 WHERE `id` = 2;
            UPDATE `temp` SET `price` = 3000 WHERE `id` = 3;
            UPDATE `temp` SET `price` = 4000 WHERE `id` = 4;
            UPDATE `temp` SET `price` = 5000 WHERE `id` = 5;";

mysqli_multi_query($link, $update);

$update2 = "UPDATE `temp` SET `price` = 6000 WHERE `id` = 6;
            UPDATE `temp` SET `price` = 7000 WHERE `id` = 7;
            UPDATE `temp` SET `price` = 8000 WHERE `id` = 8;
            UPDATE `temp` SET `price` = 9000 WHERE `id` = 9;
            UPDATE `temp` SET `price` = 10000 WHERE `id` = 10;";

mysqli_multi_query($link, $update2);

?>

mysqli_multi_query($link, $update); -正常に実行されました

mysqli_multi_query($link, $update2); -実行されません。

何か不足している可能性がある場合、または構文に関して、誰かがガイドできますか。

4

4 に答える 4

1

1つのクエリだけを使用するのはどうですか

UPDATE `temp` 
SET `price` = case when id = 1 then 1000 
                   when id = 2 then 2000
                   when id = 3 then 3000
                   when id = 4 then 4000
                   when id = 5 then 5000
                   when id = 6 then 6000
                   when id = 7 then 7000
                   when id = 8 then 8000
                   when id = 9 then 9000
                   when id = 10 then 10000
                   else price
              end
于 2013-07-10T09:19:56.580 に答える
0
$sql = "UPDATE temp SET price = ? WHERE id = ?";
$stm = $link->prepare($sql);
$link->autocommit(FALSE);
$stm->bind_param("ii" $row['price'], $row['id']);
foreach ($array as $row) {
    $stm->execute();
}
$link->commit();

このようなものですが、テストされていません。私はいつも準備されたステートメントを扱うmysqliの方法を軽蔑していました

于 2013-07-10T09:26:41.903 に答える
0

すべての結果を取得する必要があります-例:

// here: first multi query

// fetch all results
while( mysqli_more_results($link) ){
    $result = mysqli_store_result($link);
    mysqli_next_result($link);
}

// here: second multi query

一部の言語の一部の SQL システムは"lazy"です。結果を要求する場合にのみクエリを送信します (C# の LINQ など)。たぶん、PHPも同じことをします。結果のフェッチを待っている接続をブロックします。

于 2013-07-10T15:03:44.567 に答える