MySQL程序中的简单查询嵌套在while循环中不起作用

时间:2017-06-14 14:54:43

标签: php mysql stored-procedures

我是一个带存储过程的新手,我对它们有一个关于它们的问题以及它们在while循环中的用法,类似于query_1> while_loop> query_2。非常清晰简单。

我有一个随机表的例子,用户例如:

// FIRST QUERY
$result_1 = $connection->query("SELECT * FROM user");
if($result_1){
    while ($row_1 = $result_1->fetch_object()){
        $id_1 = $row_1->id;
        echo "<b>id_1: ".$id_1."</b><br />";
        // SECOND QUERY
        $result_2 = $connection->query("SELECT * FROM user");
        if($result_2){
            while ($row_2 = $result_2->fetch_object()){
                $id_2 = $row_2->id;
                echo "id_2: ".$id_2."<br />";
            }
            $result_2->close();
            $connection->next_result();
        }
    }
    $result_1->close();
    $connection->next_result();
}

有效。然后我将查询存储在过程中,并进行如下调用:

$result_1 = $connection->query("CALL test_procedure()");
$result_2 = $connection->query("CALL test_procedure()");

相同的程序

CREATE PROCEDURE test_procedure()
BEGIN
SELECT * from user;
END

如果我将两个查询都放在存储过程中,则只有第一个查询有效,第二个查询失败。如果我只放入第二个存储过程,一切都OK,但第一个必须在PHP中。我无法理解为什么......谁都知道?

编辑:这是结果:

使用PHP中的SQL查询:

$result_1 = $connection->query("SELECT * FROM user");
$result_2 = $connection->query("SELECT * FROM user");

或者使用存储过程中的第二个查询:

$result_1 = $connection->query("SELECT * FROM user");
$result_2 = $connection->query("CALL x_test()");

结果是:

id_1: 1
id_2: 1
id_2: 2
id_2: 3
id_2: 4
id_2: 5
id_1: 2
id_2: 1
id_2: 2
id_2: 3
id_2: 4
id_2: 5
id_1: 3
id_2: 1
id_2: 2
id_2: 3
id_2: 4
id_2: 5
etc.

但是使用存储过程中的第一个查询,第二个使用PHP中的SQL:

$result_1 = $connection->query("CALL x_test()");
$result_2 = $connection->query("SELECT * FROM user");

或者在存储过程中使用两个查询

$result_1 = $connection->query("CALL x_test()");
$result_2 = $connection->query("CALL x_test()");

结果是:

id_1: 1
id_1: 2
id_1: 3
etc.

我不知道为什么!

0 个答案:

没有答案