23 października 2015

Wykonanie zapytania SQL z nieznaną liczbą kolumn wynikowych

Kategoria: PHP, SQL Autor: FX

Poniższy kod wyświetla z bazy dowolne zapytanie SQL (o nieznanej liczbie kolumn po SELECT) bez chronionych parametrów (?) w bibliotece MySQLi.


Zapytanie – zamiast przypisać do zmiennej – można wczytać np. z bazy danych, albo z klawiatury w innej części programu.

fragment zeszyt.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 include "polacz.php"; //tu laczymy sie z baza - biblioteka MySQLi
 $zapytanie="SELECT imie, nazwisko FROM klient;"; //dowolne zapytanie SELECT z bazy, z dowolna liczba parametrow po przecinkach
 $pozycja=strpos($zapytanie, "FROM");
 if ($pozycja!=0)
 {
   $parametry= substr($zapytanie, 7, $pozycja-8); //parametry wyciete do slowa FROM, zapytanie musi zaczynać się od SELECT bez spacji
   $tpar=explode(",",$parametry); //rozbijamy na pojedyncze parametry
   $ilosc=count($tpar); // obliczenie ilosci parametrow SELECT
   if ($sql=$baza->prepare($zapytanie))
   {
    $sql->execute();
    $php_polecenie="\$sql->bind_result("; //ukladamy polecenie PHP w stringu
    for ($i=0; $i<$ilosc; $i++)
      $php_polecenie .= "\$zmienna[$i]".($i<$ilosc-1 ? ", " : ");"); //do kazdej kolumny wynikowej SELECT dodajemy jedna zmienna z tablicy
    eval($php_polecenie); //wykonanie polecenia PHP ze stringu
    echo "<table border="1">\n<tr>";
    for ($i=0;  $i<$ilosc; $i++)
           echo "<th>".$tpar[$i]."</th>";
    echo "</tr>\n";
    while ($sql->fetch())
    {
     echo  "<tr>";
     for ($i=0;  $i<$ilosc; $i++)
           echo "<td>".$zmienna[$i]."</td>"; //jedna linijka w z wyswietlonej tablicy
     echo "</tr>\n";
    }
    echo "</table>";
   }
   $sql->close();
  }
$baza->close();
?>

Komentowanie wyłączone.