1

私はほとんど機能している古い質問に対する答えを得ました。

私には機能があります、

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

このように使いたい

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

この機能は正常に動作しますが、1ページに1回しか使用できません。二度目にそれを呼んだとき、それは何もしません。エラーもありません。関数が発生しなかったようです。

複数回動作させ、whileループで動作させるには、何を変更する必要がありますか?

4

7 に答える 7

3

次のようなものを使用します。

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

それは醜いですが、あなたがそのようにしたいのなら...

于 2010-02-08T00:48:12.097 に答える
1

代わりに、次のようなものを使用できます。

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

そして、次のように使用します。

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

それはまだ醜いですが、少し良くなっています。

于 2010-02-08T00:52:19.477 に答える
0

私があなたの最後の質問(あなたが受け入れなかった...)に与えた答えは、この問題を解決します。

特定のtable/where句のマッピングを維持し、呼び出しごとに正しいリソースを使用します。

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);
}
于 2010-02-08T01:44:56.507 に答える
0

データベースから受け取った値を繰り返し処理したいと思いますか?

ループをforeach関数に変更する必要があります。

foreach (vraagOp("testtable","testtype = test") as $row) 
{
   // here you have full access on the rows the function returns
   print_r($row);
   echo "testing <br>";
}
于 2010-02-07T23:30:17.160 に答える
0

おそらく、これを試すことができます:

function do_query($table, $where){
   // please do some escaping for your $table and $where if necessary
   $qVraagOp = "SELECT * FROM `$table` WHERE $where";
   $rVraagOp = mysql_query( $qVraagOp );
   return $rVraagOp;
}

function do_fetch($result){
   return mysql_fetch_assoc( $result );
}

$res = do_query('testtable', 'testtype = "test"');

while($row = do_fetch($res)){
   var_dump($row); // dump each row out
}

私の推測では、「testtype = test」でクエリにエラーがあると思われます。これは、test が文字列であるためです (または、それは列ですか?)。したがって、エラーを見つけるために 1 回だけ呼び出されました。

于 2010-02-07T23:40:34.993 に答える