Intereting Posts
Как обновить базу данных mysql без перезагрузки страницы Как обрабатывать исключения и сообщения об ошибках в Laravel 5? Как загрузить файл в codeigniter? Как заблокировать одноразовые адреса электронной почты в регистрационной форме вашего сайта? Существуют ли общедоступные статические переменные конечного класса vTiger webservice "ACCESS_DENIED: разрешение на выполнение операции отклонено для id" Проблема при попытке использования IN () в wpdb Какие шаги вы предпринимаете для устранения проблем с PHP cURL? Проблема кодировки символов с PHP Простой HTML DOM Parser zend form для multicheckbox удалять входные данные из меток Программирование PHP OOP MySQL Как получить данные POST, отправленные с использованием «application / octet-stream» в PHP? PHP печатает имена полей SQL как массив с соответствующими значениями, отображаемыми один раз в строке как определить html-тег после каждой 5-й итерации в цикле foreach как получить подробную информацию о заказе через продавца flipkart api в php

PHP: позволяет вашей собственной функции работать с циклом while

$ qVraagGroepenOp = "SELECT * FROM $ tabele WHERE $ where"; $ rVraagGroepenOp = mysql_query ($ qVraagGroepenOp); $ aVraagGroepenOp = mysql_fetch_assoc ($ rVraagGroepenOp)

и я преобразовал это в функцию

vraagOp("testtable","testtable_ID = $id"); function vraagOp($table,$where) { $qVraagOp = "SELECT * FROM $table WHERE $where"; $rVraagOp = mysql_query( $qVraagOp ); $aVraagOp = mysql_fetch_assoc( $rVraagOp ); return $aVraagOp; } 

только проблема в том, когда мне нужно больше одной строки, мне нужно использовать цикл while

 $qVraagGroepenOp = "SELECT * FROM testtable where testtype = test"; $rVraagGroepenOp = mysql_query ( $qVraagGroepenOp ); while ( $aVraagGroepenOp = mysql_fetch_assoc ( $rVraagGroepenOp ) ) { echo "testing <br>"; } 

Это больше не будет работать, есть ли уловка, чтобы моя функция работала с этим циклом?

Это не сработает, но я хочу достичь чего-то подобного

 while (vraagOp("testtable","testtype = test")) { echo "testing <br>"; } 

Это возможно?

Это можно сделать со статическими переменными в области функций.

 function vraagOp($table,$where) { static $rVraagOp; if(!$rVraagOp){ $qVraagOp = "SELECT * FROM $table WHERE $where"; $rVraagOp = mysql_query( $qVraagOp ); } return mysql_fetch_assoc( $rVraagOp ); } 

Это должно делать то, что вам нужно.

Эта функция возвращает массив строк – это общий шаблон, который yu может использовать почти везде, где вы получаете несколько строк из запроса.

 function vraagOp($table,$where) { $sql= "SELECT * FROM $table WHERE $where"; $query= mysql_query($sql); if ($query != false) { $result = array(); while ( $row = mysql_fetch_assoc($query) ) $result[] = $row; return $result; } return $false; } //usage $rows = vraagOp($table,$where); if ($rows) { foreach ($rows as $row) use($row); } 

Эта функция будет «кэшировать» ресурс результата mysql из каждой уникальной комбинации $ table / $ where и получать следующий результат от него при каждом последующем вызове. Он вернет ассоциативный массив для каждой строки, или false когда нет оставшихся строк.

 function vraagOp($table, $where) { // Holds our mysql resources in a map of "{$table}_{$where}" => resource static $results = array(); $key = $table . '_' . $where; if (!isset($results[$key])) { // first call of this particular table/where $results[$key] = mysql_query("SELECT * FROM $table WHERE $where"); } $row = mysql_fetch_assoc($results[$key]); if ($row === false) // remove this key so a subsequent call will start over with a new query unset($results[$key]); return $row; } // Usage while ($row = vraagOp("table1", "where field > 7")) { print_r($row); } не function vraagOp($table, $where) { // Holds our mysql resources in a map of "{$table}_{$where}" => resource static $results = array(); $key = $table . '_' . $where; if (!isset($results[$key])) { // first call of this particular table/where $results[$key] = mysql_query("SELECT * FROM $table WHERE $where"); } $row = mysql_fetch_assoc($results[$key]); if ($row === false) // remove this key so a subsequent call will start over with a new query unset($results[$key]); return $row; } // Usage while ($row = vraagOp("table1", "where field > 7")) { print_r($row); } 

Эта

 while (vraagOp("testtable","testtype = test")) { echo "testing <br>"; } 

будет работать, если вы измените VraagOp (), чтобы вернуть false когда соответствующая запись не была найдена.

Вам нужно будет переместить часть mysql_query() из VraagOp () и просто оставить часть mysql_fetch_assoc .

Однако я не могу понять, какая польза там будет? Вы просто строите (ненужную) оболочку вокруг mysql_fetch_assoc() , не так ли?

Вам нужно будет превратить vraagOp() в итератор, а затем использовать foreach() , чтобы сделать эту работу.

Ваш пример не будет работать, потому что условие выполняется на каждой итерации. Это означает, что vraagOp("testtable","testtype = test") будет вызываться с каждой итерацией, пока не вернет ложное значение. mysql_fetch_assoc делает это, но ваша функция не работает.

Как мы можем вызвать функцию внутри цикла, пример ниже:

 $sql_gpfsF="SELECT * FROM emp_salary"; $result_gpfsF=mysql_query($sql_gpfsF); while($row_gpfsF=mysql_fetch_assoc($result_gpfsF)) { call_function(); } function call_function() { echo " Function Called </ br>"; } в $sql_gpfsF="SELECT * FROM emp_salary"; $result_gpfsF=mysql_query($sql_gpfsF); while($row_gpfsF=mysql_fetch_assoc($result_gpfsF)) { call_function(); } function call_function() { echo " Function Called </ br>"; }