PHP: Bir döngü ile kendi fonksiyon iş icar

6 Cevap php

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

ve ben bir işlevi olduğunu dönüştürülür

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

i bir süre döngü kullanmak gerekir daha sonra bir satır sadece ihtiyacınız olduğunda sorun

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

Bu alışkanlık bu süre döngü ile benim işlevi iş yapmak için bir hile var artık çalışmıyor?

Bu won't çalışır ama bunun gibi bir şey ulaşmak istiyorum

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

Bu mümkün mü?

6 Cevap

Bu fonksiyon kapsamında statik değişkenler ile yapılabilir.

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

Yani sonra konum ne yapmalıyım.

Bu işlev, satır bir dizi döndürür - yu bir sorgudan birden fazla satır olsun hemen hemen her yerde kullanabileceğiniz bir genel desen bulunuyor.

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

Bu fonksiyon her bir sonraki çağrıda ondan sonraki sonuç her benzersiz $ tablo / $ kombinasyonu, 'cache' mysql result resource ve almak olacaktır. Bu sol hiçbir satır olduğunda false her satır için bir ilişkisel dizi döndürmek, ya da olacaktır.

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

Bu

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

Eğer VraagOp () dönmek için değiştirirseniz çalışacaktır false kriterlerinize uygun kayıt bulunamadı zaman.

Sen) VraagOp (dışarı mysql_query() kısmını taşımak zorunda ve sadece içeri mysql_fetch_assoc bölümünü bırakacaktı

Ancak, ben gerçekten orada ne olacağını fayda göremiyorum? Sen sadece, mysql_fetch_assoc() etrafında bir (gereksiz) sarıcı olmaz bina olurdu?

Bu işi yapmak için foreach() vraagOp() bir iterator dönüşmesi ve sonra kullanmanız gerekir.

Durum her yineleme üzerinde yürütülür çünkü örnek çalışmaz. Yani bir yanlış değer döndürür kadar vraagOp("testtable","testtype = test") her bir yinelemenin denilen olacağını demektir. mysql_fetch_assoc bunu yapar ama işlevi yok.