我想在一个不同的数组中保存sql语句的每个结果。我试过了:
$sql = "SELECT * FROM `link_server` WHERE `in_use` = false;";
$sql .= "SELECT * FROM `link_queue` WHERE `active` = false;";
if ($db->multi_query($sql))
{
do
{
// Erstes Abfrageergebnis ausgeben
if ($result = $db->store_result())
{
// Abfrageergebnis ausgeben
while ($server_fetch = $result->fetch_array())
{
$server[] = $server_fetch;
}
$result->close();
}
// Trenner fuer Zweites Abfrageergebnis
if ($db->more_results())
{
echo "<hr />test";
$queue[] = $server_fetch;
}
} while ($db->next_result());
echo "Servers:";
print_r($server);
echo "Queue:";
print_r($queue);
}
第一个语句的结果应保存在数组$server
中,第二个语句应保存在数组$queue
中。
上面的示例将完整的返回(来自两个语句)存储在第一个数组($server
)中。第二个数组是空的。
我该如何解决?
感谢您的帮助!
答案 0 :(得分:1)
$db->more_results()
是一种标记已达到查询结果的方式,而不是获取下一组结果。您可以使用它来告诉您的循环开始加载下一个数组 - 例如通过设置标志。
if ($result = $mysqli->store_result()) {
while ($server_fetch = $result->fetch_row()) {
if (!$second) {
$server[] = $server_fetch;
} else {
$queue[] = $server_fetch;
}
}
$result->close();
}
/* next set of results */
if ($mysqli->more_results()) {
$second = true;
}
或者,您可以像这样使用变量变量:
/* set up variables */
$server = array();
$queue = array();
$active = 'server';
/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store result set */
if ($result = $mysqli->store_result()) {
while ($server_fetch = $result->fetch_row()) {
${$active}[] = $server_fetch;
}
$result->close();
}
/* next set of results */
if ($mysqli->more_results()) {
$active = 'queue';
}
} while ($mysqli->next_result());
}
虽然我必须同意评论员,但这会为一对简单的请求增加许多工作量和额外的代码复杂性。