Ottenere il risultato di una query SQL in PHP

Nella lezione precedente abbiamo creato il codice di test. Ricordo la sua parte essenziale, che esegue una query al database:

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

Come puoi vedere, dopo che la query al database è stata eseguita, nella variabile $res ci sarà il risultato di questa azione. Tuttavia, non è nella forma di cui abbiamo bisogno in PHP, ma nella forma in cui ci è stata inviata dal database.

Per ottenere il risultato nella forma a noi consueta, è necessario utilizzare la funzione mysqli_fetch_assoc, che estrae dal risultato una riga alla volta.

Proviamo:

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

Come risultato, var_dump mostrerà un array con il primo impiegato:

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

In questo caso, il primo impiegato scomparirà dalla variabile $res, e la successiva chiamata di mysqli_fetch_assoc otterrà già il prossimo impiegato.

E così si può chiamare la nostra funzione finché gli impiegati non finiscono. Non appena ciò accade, la successiva chiamata della funzione restituirà false.

Proviamo:

php<?php
  $row1 = mysqli_fetch_assoc($res);
  var_dump($row1); // impiegato numero 1
  
  $row2 = mysqli_fetch_assoc($res);
  var_dump($row2); // impiegato numero 2
  
  $row3 = mysqli_fetch_assoc($res);
  var_dump($row3); // impiegato numero 3
  
  $row4 = mysqli_fetch_assoc($res);
  var_dump($row4); // impiegato numero 4
  
  $row5 = mysqli_fetch_assoc($res);
  var_dump($row5); // impiegato numero 5
  
  $row6 = mysqli_fetch_assoc($res);
  var_dump($row6); // impiegato numero 6
  
  $row7 = mysqli_fetch_assoc($res);
  var_dump($row7); // mostrerà NULL - gli impiegati sono finiti
?>