php while循环只运行一次

时间:2014-03-13 10:00:42

标签: php mysql while-loop

我有一个用于检查某些数据可用性的php脚本。我从外部jquery调用这个脚本。 jquery运行正常。这是我的php:

<?php


$avares = checkAva($fi_nm, $tbl_nm, $txtval);

echo $avares;

function checkAva($field, $table, $curval) {

$avres = mysql_query("SELECT " . $field . " FROM " . $table . "") or die("query failed");

while ($a_row = mysql_fetch_array($avres)) {
    $dbval = $a_row[$field];

    if ($curval == $dbval) {
        return "no";
    } else {
        return "yes";
    }
}
}

?>

$ curval是来自外部jquery的变量。我的问题是虽然数据库中有很多条目,但while循环似乎只运行一次。我用一个整数变量检查它,而while循环似乎只运行一次。你能帮我解决一下吗?

5 个答案:

答案 0 :(得分:6)

看看你的代码。

while ($a_row = mysql_fetch_array($avres)) {
    $dbval = $a_row[$field];

    if ($curval == $dbval) {
        return "no";
    } else {
        return "yes";
    }
}

你已经使用了return,如果它返回true,那么也会根据你的需要返回更改。 return语句立即结束当前函数的执行

答案 1 :(得分:1)

它会设计为你有一个return语句。从你所说的你实际上并不想要它返回,但设置一个变量,在执行结束时将返回no或yes。我可能错了,但嘿嘿。

<?php
echo checkAva($fi_nm, $tbl_nm, $txtval);

function checkAva($field, $table, $curval) {
    $avres = mysql_query("SELECT " . $field . " FROM " . $table) or die("query failed");

    $noOrYes = "yes";
    while ($a_row = mysql_fetch_array($avres)) {
        if($curval == $a_row[$field]) {
            $noOrYes = "no";
        }
    }

    return $noOrYes;
}
?>

答案 2 :(得分:0)

直接将条件放在您的查询中

function checkAva($field, $table, $curval) {

    $avres = mysql_query("SELECT " . $field . " FROM " . $table . " 
                          WHERE `".$field."` = '".$curVal."'");
    $res = mysql_fetch_array($avres);
    if(is_array($res) && count($res) > 0)
        return "Yes";
    else
        return "No";
}

不是得到所有结果并检查每一个结果,而是直接提出一个条件来提取满足你条件的结果。如果你有很多记录,这是明智的。

答案 3 :(得分:0)

您需要将其中一个返回到while循环之外。 例如,如果您只想检查$ curval == $ dbval

while ($a_row = mysql_fetch_array($avres)) {
    $dbval = $a_row[$field];

    //If the condition was met return with a no
    if ($curval == $dbval) {
       return "no";
    }
}
//If the condition was not met return yes
return yes;

这基本上就是你需要做的事情,所以循环会一直运行,直到满足你的条件或者根本不运行。

答案 4 :(得分:0)

可能导致Loop迭代一次的可能问题是:

  1. 用于$ query和$ result的变量中的错误

  2. 同名变量在循环内外

  3. Return语句的位置不正确

  4. 无效的Mysql语句