在php中获取多行

Actually I want a output of more than one row and its giving me only one. This is my code and it returns only one row. But when I run the same query SELECT DISTINCTROW metal, $fsym from metals ORDER BY id DESC LIMIT 4 in phpmyadmin it gives me my desired output of 4 rows.

function readAnother()
{
    $fsym =    $_GET['fsym'];
    echo $fsym . '<br>';
    $query = "SELECT DISTINCTROW metal, $fsym from metals ORDER BY id DESC LIMIT 4";
    $stmt = $this->conn->prepare($query);

    $stmt->bindParam(1,$this->fsym);
    $stmt->execute();

    $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $this->metal = $row['metal'];
    $this->price_eur = $row[$fsym];

}

As per discussion on comment: Use fetchall

You can try below code

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    $this->metal = $row['metal']; // by this it will add the last 4th record metal value in the variable 
    $this->price_eur = $row[$fsym];
}

I will recommend that if you want to use all rows 'metal' then use the proper array

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$finalArray = [];
foreach ($rows as $row) {
    $finalArray[] = ['metal' => $row['metal'], 'price_eur'=> $row[$fsym]]

}
print_r($finalArray);

It's better to use following function: http://php.net/manual/ru/pdostatement.fetch.php Like that:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $this->metal = $row['metal'];
    $this->price_eur = $row[$fsym];
}

If you want to use fetchAll then use it like that:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    $this->metal = $row['metal'];
    $this->price_eur = $row[$fsym];
}