0

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];

}
Isaac Bennetch
  • 11,830
  • 2
  • 32
  • 43
  • have you inspected the output - such as `var_dump( $row );` within the function? – Professor Abronsius Jul 17 '18 at 06:27
  • In var_dump its returning only one row. – Payal Tripathy Jul 17 '18 at 06:29
  • When i did $row = $stmt->fetchAll(PDO::FETCH_ASSOC); i am getting all the four rows as my desired output but getting another error now – Payal Tripathy Jul 17 '18 at 06:33
  • Array ( [0] => Array ( [metal] => palladium [price_eur] => 756.21 ) [1] => Array ( [metal] => platinum [price_eur] => 675.59 ) [2] => Array ( [metal] => silver [price_eur] => 13.6 ) [3] => Array ( [metal] => gold [price_eur] => 100.38 ) ) Notice: Undefined index: metal in C:\xampp\htdocs\metalsapi\object.php on line 53 Notice: Undefined index: price_eur in C:\xampp\htdocs\metalsapi\object.php on line 54 – Payal Tripathy Jul 17 '18 at 06:34
  • Add the Updated code on question – DsRaj Jul 17 '18 at 06:34
  • It's better to fetch rows one by one like that: `while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ... }` – Nikita Leshchev Jul 17 '18 at 06:34
  • @DsRaj i did that i took the query n pasted it in phpmyadmin and it gave me the correct output of 4 rows . But in this php its not coming – Payal Tripathy Jul 17 '18 at 06:36
  • Undefine index error because of these two line: $row['metal'];$row[$fsym] as the value is inside the array index – DsRaj Jul 17 '18 at 06:36
  • how to solve this issue @DsRaj . Please help. – Payal Tripathy Jul 17 '18 at 06:38
  • where you use this $this->metal and $this->price_eur? I mean what you want in this variable? – DsRaj Jul 17 '18 at 06:40

2 Answers2

0

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];
}
Nikita Leshchev
  • 1,784
  • 2
  • 14
  • 26
0

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);
DsRaj
  • 2,288
  • 1
  • 16
  • 26