我是一个带存储过程的新手,我对它们有一个关于它们的问题以及它们在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.
我不知道为什么!