php while loop running only once

陌路散爱 提交于 2019-12-25 19:05:34

问题


I have a php script for check the availability of some data. I call this script from external jquery. the jquery is running fine. here is my 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 is the variable coming from external jquery. my problem is that the while loop seems to run only once though there are lot of entries in the DB. I checked it with an integer variable and the while loop seems to run only once. can you help me to solve that?


回答1:


Look at your code.

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

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

you have used return, if its true it returns and false then also returns change those according to your needs. The return statement immediately ends execution of the current function




回答2:


It will by design as you have a return statement. From what you have said your not actually wanting it to return but to set a variable that at end of execution will return no or yes. I could be wrong on this but hey ho.

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



回答3:


Directly put the condition in your Query like

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

Instead of getting all the results and checking with each one of the result you directly put a condition to extract the results which satisfies your condition.This will be suggestable if you have many records.




回答4:


You need to put one of the return outside of the while loop. For example if you just wanted to check if $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;

That's basically what you need to do so the loop will run until your condition was met or not at all.




回答5:


The possible issue that can cause Loop to iterate once are:

  1. Error in the Variable used for the $query and $result

  2. Same name Variable inside and outside of the Loop

  3. Incorrect placement of Return statement

  4. Invalid Mysql Statement



来源:https://stackoverflow.com/questions/22374960/php-while-loop-running-only-once

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