Why my PHP code is returnig Fatal error after properly done loop?

118 views Asked by At

Code is supose to show every query from array. It works corectlly in means that is executing and showing every query in new div with all info that query return, but after that rest of the code is not executing, propably because of Errors. I tried several methods and nothing helps. Every time same errors occurred.

Error messages are :

Warning: Undefined array key 26 in C:\xampp\htdocs\connect.php on line 64

and

Fatal error: Uncaught Error: Call to a member function fetchAll() on null in C:\xampp\htdocs\connect.php:64 Stack trace: #0 {main} thrown in C:\xampp\htdocs\connect.php on line 64

My code look like this:

$host = 'localhost';
$user = 'root';
$password= '';
$database = 'filmy';

      try {
            $db=new PDO ("mysql:host=$host;dbname=$database",
            $user, $password,
            [
                  PDO::ATTR_EMULATE_PREPARES => false,
                  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
      ]);
      
      } catch (PDOException $error){
            exit('Database error');
      }
 $q=1;
      $z=1;     
      while ($ass= $query[$q]->fetchAll()){
            
            echo('<div class="wyniki">');
            echo("<b>Zapytanie nr. ".$z).":</b><br>";
           $num= count($ass);
            $realnum=$num -1;
           $b=0;
           $c=0;
           while($b<=$realnum){
                  
                  $asscount=$ass[0];
                  $count= count(array_keys($asscount));
                  $realcount= $count/2-1;
                  
                  $echo=$ass[$b];
                 while ($c<=$realcount){
                 echo($echo[$c]." ");
                 $c++;
            }
            echo("<br>");
            $c=0;
            $b++;
           }
           echo"</div>";
           $q++;
           $z++;
           
     };

And here is array that im using (It is defined before loop)

$query = array(
            1  => $db->query('SELECT * FROM filmy;'),
            2  => $db->query('SELECT * FROM aktorzy;'),
            3  => $db->query('SELECT kraj FROM `kraje`;'),
            4  => $db->query('SELECT COUNT(`IdWydarzenie`) FROM  wydarzenie;'),
            5  => $db->query('SELECT AVG(`Ocena`) FROM recenzje;'),
            6  => $db->query('SELECT  tytul FROM  filmy  WHERE CzasTrwania_min>=120'),
            7  => $db->query('SELECT ImieNazwisko FROM aktorzy WHERE year(DataUrodzenia)>1960;'),
            8  => $db->query('SELECT COUNT(ImieNazwisko) FROM aktorzy WHERE month(DataUrodzenia)=04;'),
            9  => $db->query('SELECT COUNT(tytul) FROM filmy WHERE RokProdukcji=2002; '),
            10  => $db->query('SELECT COUNT(ImieNazwisko) FROM aktorzy WHERE year(DataUrodzenia) BETWEEN 1970 AND 1979;'),
            11  => $db->query('SELECT tytul FROM `filmy` ORDER BY RokProdukcji DESC LIMIT 3; '),
            12  => $db->query('SELECT ImieNazwisko FROM aktorzy ORDER BY DataUrodzenia DESC LIMIT 2; '),
            13  => $db->query("SELECT * FROM filmy Where tytul LIKE 'S%';"),
            14  => $db->query('SELECT * FROM filmy WHERE RokProdukcji>2000 AND CzasTrwania_min<=120;'),
            15  => $db->query('SELECT RokProdukcji, COUNT(*) FROM filmy GROUP BY RokProdukcji; '),
            16  => $db->query('SELECT tytul FROM filmy INNER JOIN film_aktor ON filmy.IdFilmy=film_aktor.IdFilmu INNER JOIN aktorzy ON film_aktor.IdAktora=aktorzy.IdAktorzy WHERE ImieNazwisko="Tom Hanks";'),
            17  => $db->query('SELECT ImieNazwisko, COUNT(IdFilmu) FROM film_aktor INNER JOIN aktorzy ON film_aktor.IdAktora=aktorzy.IdAktorzy GROUP BY ImieNazwisko;'),
            18  => $db->query('SELECT ImieNazwisko, COUNT(IdFilmu) AS liczba FROM aktorzy INNER JOIN film_aktor ON aktorzy.IdAktorzy=film_aktor.IdAktora GROUP BY ImieNazwisko HAVING liczba>=2; '),
            19  => $db->query('SELECT Tytul, AVG(Ocena) FROM filmy INNER JOIN film_premiera ON filmy.IdFilmy=film_premiera.IdFilm_Premiera INNER JOIN recenzje ON film_premiera.IdFilm_Premiera=recenzje.IdRecenzje GROUP BY Tytul;'),
            20  => $db->query('SELECT COUNT(tytul) AS Liczba FROM filmy INNER JOIN film_gatunek ON filmy.IdFilmy=film_gatunek.IdFilmu INNER JOIN gatunek ON film_gatunek.IdGatunku=gatunek.IdGatunek WHERE Nazwa="Familijny"; '),
            21  => $db->query('SELECT Nazwa AS GatunkiFilmówWJakichGrałMorganFreeman FROM aktorzy INNER JOIN film_aktor ON aktorzy.IdAktorzy=film_aktor.IdAktora INNER JOIN filmy ON film_aktor.IdFilmu=filmy.IdFilmy INNER JOIN film_gatunek ON filmy.IdFilmy=film_gatunek.IdFilmu INNER JOIN gatunek ON film_gatunek.IdGatunku=gatunek.IdGatunek WHERE ImieNazwisko="Morgan Freeman";'),
            22  => $db->query('SELECT Kraj, COUNT(IdFilmy) AS LiczbaFilmów FROM filmy INNER JOIN film_produkcja ON filmy.IdFilmy=film_produkcja.IdFilmu INNER JOIN kraje ON film_produkcja.IdProdukcji=kraje.IdKraje GROUP BY IdKraje;'),
            23  => $db->query('SELECT Nazwa, COUNT(IdUczestnika) AS LiczbaOsób FROM wydarzenie RIGHT JOIN wydarzenie_uczestnicy ON wydarzenie.IdOrganizatora=wydarzenie_uczestnicy.IdUczestnika GROUP BY IdWydarzenia;'),
            24  => $db->query('SELECT idOsoby, Imię, Nazwisko FROM osoby LEFT JOIN wydarzenie_uczestnicy ON osoby.IdOsoby=wydarzenie_uczestnicy.IdUczestnika WHERE idWydarzenia IS NULL;'),
            25  => $db->query("SELECT g.Nazwa FROM Kraje k INNER JOIN Film_Produkcja fp ON k.IdKraje = fp.IdProdukcji INNER JOIN Filmy f ON f.IdFilmy = fp.IdFilmu INNER JOIN Film_Gatunek fg ON fg.IdFilmu = f.IdFilmy INNER JOIN Gatunek g ON g.IdGatunek = fg.IdGatunku WHERE k.Kraj = 'Polska' GROUP BY g.Nazwa ORDER BY COUNT(*) DESC;"),
           

      );
1

There are 1 answers

1
Danish Hussain On

This is not a proper way to query the database.
First, plan what you want to get from the database. Then query the database in a proper order so that responses get simple and easier to debug.
Thanks.