SQL päringu tulemuse saamine PHP-s

Eelmises õppetükis tegime testkoodi. Tuletan meelde selle olulist osa, mis teeb päringu andmebaasi:

php<?php
  $query = 'SELECT * FROM users';
  $res = mysqli_query($link, $query) or die(mysqli_error($link));
  var_dump($res);
?>

Nagu näete, pärast seda kui päring andmebaasi tehakse, on muutujas $res selle tegevuse tulemus. Siiski ei ole see vormis, mida me vajame PHP-s, vaid selles vormis, milles andmebaas selle meile saatis.

Selleks, et saada tulemus meile harjumuspärases vormis, on vaja kasutada funktsiooni mysqli_fetch_assoc, mis võtab tulemusest ühe rea.

Proovime:

php<?php
  $row = mysqli_fetch_assoc($res);
  var_dump($row);
?>

Tulemusena var_dump väljastab massiivi esimese töötajaga:

php<?php
  ['id' => 1, 'name' => 'user1', 'age' => 23, 'salary' => 400]
?>

Samal ajal muutujast $res esimene töötaja kaob ja järgmine mysqli_fetch_assoc käsk saab juba järgmise töötaja.

Ja nii saab meie funktsiooni kutsuda kuni töötajad otsa saavad. Kui see juhtub, siis järgmine funktsiooni käsk tagastab false.

Proovime:

php<?php
  $row1 = mysqli_fetch_assoc($res);
  var_dump($row1); // töötaja number 1
  
  $row2 = mysqli_fetch_assoc($res);
  var_dump($row2); // töötaja number 2
  
  $row3 = mysqli_fetch_assoc($res);
  var_dump($row3); // töötaja number 3
  
  $row4 = mysqli_fetch_assoc($res);
  var_dump($row4); // töötaja number 4
  
  $row5 = mysqli_fetch_assoc($res);
  var_dump($row5); // töötaja number 5
  
  $row6 = mysqli_fetch_assoc($res);
  var_dump($row6); // töötaja number 6
  
  $row7 = mysqli_fetch_assoc($res);
  var_dump($row7); // väljastab NULL - töötajad said otsa
?>