PHP: letting your own function work with a while loop

妖精的绣舞 提交于 2019-12-25 10:25:33

问题


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

and I converted that to a function

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

only the problem is when i need more then one row i need to use a while loop

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

It wont work anymore is there a trick to make my function work with this while loop?

This won't work but I want to reach to something like it

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

Is this possible?


回答1:


This could be done with static variables in the function scope.

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

That should do what you're after.




回答2:


This function returns an array of rows - it's a generic pattern yu can use almost anywhere you get multiple rows from a query.

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);
}



回答3:


This function will 'cache' the mysql result resource from each unique $table/$where combination, and fetch the next result from it on each subsequent call. It will return an associative array for each row, or false when there are no rows left.

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);
}



回答4:


This

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

will work if you change VraagOp() to return false when no matching record was found.

You would have to move the mysql_query() part out of VraagOp(), and just leave the mysql_fetch_assoc part in.

However, I can't really see what benefit there would be? You would just be building a (unnecessary) wrapper around mysql_fetch_assoc(), wouldn't you?




回答5:


You'll need to turn vraagOp() into an iterator and then use foreach() in order to make this work.




回答6:


Your example won’t work because the condition is executed on every iteration. That means vraagOp("testtable","testtype = test") would be called with each iteration until it returns a falsely value. mysql_fetch_assoc does that but your function doesn’t.




回答7:


How can we call function inside while loop example is below :

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

}


来源:https://stackoverflow.com/questions/2209552/php-letting-your-own-function-work-with-a-while-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!