$ 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>"; }