mysql_fetch_array while loop. Как это работает?

Я прочитал о функции на php.net и это еще не ответил на мой вопрос. Я знаю новичков в C, и я только начал использовать php. Обычно в C, если вы должны были делать цикл while, должно быть какое-то условие, чтобы продвинуть цикл до точки, где она больше не будет действительной:

while (x >= 10) { printf("..."; printf("x \n"; x++; } 

Однако в моем php-скрипте, который я использую для системы сообщений pm, у меня есть цикл while следующим образом:

 while($row2 = mysql_fetch_array($query)) 

с последующим:

 { echo "<table border=1>"; echo "<tr><td>"; echo "Message #: "; echo $row['id']; echo "</td></tr>"; echo "<tr><td>"; echo "To: "; echo $row['to']; echo "</td></tr>"; echo "<tr><td>"; echo "From: "; echo $row['from']; echo " "; echo "</td></tr>"; echo "<tr><td>"; echo "Message: "; echo $row['message']; echo "</td></tr>"; echo "</br>"; ?> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> <table border="0"> <tr><td colspan=2></td></tr> <tr><td></td><td> <input type="hidden" name="id" maxlength="32" value = "<?php echo $row['id']; ?>"> </td></tr> <tr><td colspan="2" align="right"> <input type="submit" name="delete" value="Delete PM # <?php echo $row['id']; ?>"> </td> <td colspan="2" align="right"> <input type="submit" name="reply" value="Reply to <?php echo $row['from']; ?>"> </td></tr> </table> <?php } ?> 

Как именно эта работа, с C-фона, казалось бы, почти так же останется в том же месте, распечатывая ту же самую «выборку массива» «строка» из того же «запроса $» каждый раз, когда мы проходим через цикл. ..

Есть ли способ, которым я могу написать это, чтобы дать мне лучшее логическое понимание того, что происходит? как сказать:

 $i=0; while ($row = ($i+mysql_fetch_array($query)) { ... ... $i++;} 

Я знаю, что, вероятно, не работает, но как эта функция увеличивается? И есть ли способ написать его там, где он действительно будет иметь какой-то прирост, видимый в коде?

спасибо

Каждый раз, когда вы вызываете mysql_fetch_array он вытягивает следующую строку из вашего запроса. Этот цикл while возвращает true, в то время как mysql_fetch_array все еще есть что-то, что можно было бы назначить переменной $row2 . Как только он выходит из строя, ему нечего оставлять переменной, а false возвращается.

ETA: Что касается последнего бита, о котором вы упомянули, вы можете иметь приращение переменной на каждой итерации цикла, как в вашем примере, но это не совсем необходимо. Вы также можете просто увидеть, сколько строк было возвращено, выполнив что-то вроде $var = mysql_num_rows($data) перед вашим циклом while.

Вы можете думать о mysql_fetch_array() как о подобной функции чтения файла, которая будет возвращать новую строку каждый раз и возвращать EOF, когда она достигает конца. Вместо EOF mysql_fetch_array() возвращает FALSE (0).

В булевом выражении PHP оценивает любое значение, отличное от 0, как ИСТИННОЕ, поэтому простейший синтаксис ниже выполняется, присваивая строку переменной $ row каждый раз, пока мы не дойдем до конца набора данных:

 while($row = mysql_fetch_array($query)) { // Process row ... } 

PHP IDE действительно будут жаловаться на назначение в состоянии, и именно так вы должны написать тот же код, чтобы избежать уведомления:

 // Get first row, or false if there were no rows $row = mysql_fetch_array($query); while ($row) { // Process row ... // Get next row $row = mysql_fetch_array($query); } 

Возможно, эта структура выглядит более знакомой.

возможно, эта следующая функция может дать вам небольшое описание о том, как работает mysql_fetch_array во время работы цикла?

 class test { public $plus = -1; public $data = array(); public $return = array(); function fetcharray(){ $this->plus++; for($i = 0; $i < sizeof($this->data[$this->plus]); $i++){ $this->return[$i] = $this->data[$this->plus][$i]; } if(sizeof($this->data[$this->plus]) < sizeof($this->data[($this->plus - 1)])){ for($i = sizeof($this->data[$this->plus]); $i < sizeof($this->data[($this->plus - 1)]); $i++){ $this->return[$i] = ""; } } return ($this->data[$this->plus]) ? $this->return : false; } } $test = new test(); $test->data = array( array("data00","data01","data02","data03","data04","data05"), array("data10","data11","data12","data13","data04","data15"), array("data20","data21","data22","data23","data24","data25"), array("data30","data31","data32","data33","data34","data35"), array("data40","data41","data42","data43","data44","data45") ); while($array = $test->fetcharray()){ echo $array[0]." = ".$array[1]." = ".$array[2]." = ".$array[3]." = ".$array[4]." = ".$array[5]."<br />\n"; } 

mysql_fetch_array () – это функция, которую вы должны вызывать, если вы хотите получить строку из приведенного исполняемого запроса, поэтому вы можете описать ее «mysql_fetch_array – Получить строку результата как ассоциативный массив, числовой массив или оба»

Сценарий таков: он возвращает массив, соответствующий выбранной строке, и перемещает указатель внутренних данных вперед. Дополнительные разъяснения:

 $result = mysql_query("SELECT id, name FROM mytable"); $row = mysql_fetch_array($result, MYSQL_NUM); 

1) Каков тип $ result? 2) Какой тип mysql_fetch_array использует для работы?

Позвольте мне ответить на это: 1) $ result – это приведенная переменная из mysql_query (), и эта функция возвращает результаты, полученные как результат mysql, и этот тип может быть создан только при вызове 7 функций:

mysql_db_query(), mysql_list_dbs(), mysql_list_fields(), mysql_list_processes(), mysql_list_tables(), mysql_query(), mysql_unbuffered_query()

и может использоваться несколькими функциями, такими как mysql_fetch_array() and mysql_db_name() and others

2) Описание функции: array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] ) см. Mysql_fetch_array Doc