使用嵌套while语句时,外部同时影响内部

时间:2014-11-03 14:33:43

标签: php

我使用php和mysqli从mysql中提取一些数据,我很惊讶这段代码可以正常工作。

<?php
$mysqli = new mysqli("localhost", "root", "", "test");

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

$result = $mysqli->query("select subscriber_number from r4_subscriber_choices");
/*
500 Records Here
*/
$ac = 'acc';
$i = 0;
while($row = $result->fetch_array())
{
$n = $row['subscriber_number'];
  //echo $i++ . '   ' .$row['subscriber_number'] . '<br/>';
  $new_q = $mysqli->query("select text_message from incoming_sms where dest_msisdn = $n  and text_message like '%acc%'");
  while($row2 = $new_q->fetch_array()){
  echo $i++ . '   ' .$row2['text_message'] . '<br/>';
  }

}

$result->close()

?>

外部while循环500条记录,而内部循环57.在我看来,我期待内循环也循环500次,因为它在外循环内部循环500次但只有57次。

有人可以解释为什么会这样吗?。

3 个答案:

答案 0 :(得分:1)

不,它没有运行57次。它运行的次数与外循环的次数相同。只有你的回声在第二个循环中,它只有57个外部记录的行。试试这个

  while($row2 = $new_q->fetch_array()){
    // echo $i++ . '   ' .$row2['text_message'] . '<br/>';
  }
  echo $i++;

对于内部查询返回0行的外部循环的所有行,您不会看到echo,因为只有在内部循环也有行时才会执行echo。就是这样。尝试在内循环之外使用虚拟回声,并且您将看到内部查询被执行多次。

A Quick Demonstration

答案 1 :(得分:0)

如果您的第一个查询中有500个结果,那么显然您的外部循环将迭代500次。你已经有了。为您的&#34;内部查询&#34;返回内部循环循环以返回多个记录。内循环开始和停止至少与外循环一样多次。

例如。如果外部查询中有500行,并且每个500内部查询中有50条记录,那么内部循环将一起迭代25000次。

答案 2 :(得分:-1)

也许第二次并不总是结果。如果$ new_q没有结果或查询无效,则不执行第二次while中的echo。