简体   繁体   中英

Why PHP function is returning Only the one row from mysql

I am fetching data from MYSQL database and Looping through the result but its returning only one row !!! can any one explain what's wrong

 function getAll()
 {
    global $con;

    $SQL  = "SELECT * FROM users";

    $stmt = $con->query($SQL);

    if($stmt->num_rows > 0){

        while($row = $stmt->fetch_row())
        {
            return $row;
        }
    }
 }

The return should be outside the while loop !

Here is how you can get all the rows :

     function getAll()
     {
        global $con;

        $SQL  = "SELECT * FROM users";

        $stmt = $con->query($SQL);

        if($stmt->num_rows > 0){

            $arr = array();

            while($row = $stmt->fetch_row())
            {
                $arr[] = $row;
            }
            return $arr;
        }
     }

Or you can do something like this return a generator and loop through :

function getAll()
     {
        global $con;

        $SQL  = "SELECT * FROM users";

        $stmt = $con->query($SQL);

        if($stmt->num_rows > 0){


            while($row = $stmt->fetch_row())
            {
                yield $row;
            }
        }
     }

see the result here !

echo '<pre>';

foreach (getAll() as $value) {
 print_r($value);
}

Once you hit a return statement all execution of that function stops. You cannot return multiple times.

You can either return an array of all rows:

function getAll()
{
    global $con;

    $SQL  = "SELECT * FROM users";

    $stmt = $con->query($SQL);

    if($stmt->num_rows > 0) {
        while($row = $stmt->fetch_row())
        {
            $array[] = $row;
        }
        return $array;
    }
 }

Or use it as a generator (probably not what you want):

function getAll()
{
    global $con;

    $SQL  = "SELECT * FROM users";

    $stmt = $con->query($SQL);

    if($stmt->num_rows > 0){

        while($row = $stmt->fetch_row())
        {
            yield $row;
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM