550 PHP i MySQL dla każdego
Za prezentację szczegółowych danych konkretnej książki odpowiadają dwie współpracujące ze sobą funkcje: showltem i printltem. Pierwsza z nich jest wywoływana ze skryptu main.php, natomiast druga — z funkcji showltem. Kod funkcji showltem został zaprezentowany na listingu 21.7. Otrzymuje ona jeden argument o nazwie id, wskazujący identyfikator książki, której dane mają zostać wyświetlone.
Listing 21.7. Kod funkcji showltem_
function showItem($id)
if( !makeDBConnection()){ return false:
$query = "SELECT 'Tytuł'. 'ISBN', 'Rok wydania' AS Rok. 'Opis'. 'Cena'. $query .- "Wydawnictwa.'Nazwa' AS Wydawnictwo. GROUP_CONCAT(”;
$query .= "Autorzy.'Nazwa') AS Autor. Książki.Id AS Id
$query .= "FROM Książki. Autorzy. Wydawnictwa. KsiążkiAutorzy
$query .= "WHERE Książki.Id=$id AND Wydawnictwa.Id=Ks1azki.Wydawnictwold
$query .= "AND Książki.Id=KsiazkiAutorzy.'KsiążkaId' AND
$query .- "Autorzy.Id = Książki Autorzy.Autorld
$query .= "GROUP BY Książki.Id ";
if(!$result = mysql_query($query)){ echo("Odrzucone zapytanie: funkcja showltem: $query"): return false:
if($row = mysql_fetch_array($result)){ printltemttrow);
el se{
return false;
return true;
Działanie funkcji rozpoczyna się od połączenia z bazą danych, za co odpowiada wywołanie funkcji makeDBConnection. Jeśli połączenie uda się nawiązać, jest wykonywane zapytanie pobierające: tytuł, numer ISBN, rok wydania, opis, cenę, nazwę wydawnictwa, dane autorów oraz identyfikator. Niezbędne jest w tym celu złączenie tabel Ksi azki, Autorzy, Wydawnictwa, Ksi azki Autorzy oraz wykonanie grupowania, gdyż jedna książka może mieć kilku autorów. Wykorzystana zostanie również, podobnie jak w przypadku funkcji search, funkcja złączająca wartości grupowanych kolumn — GROUP_CONCAT. Całe zapytanie ma postać:
SELECT 'Tytuł'. 'ISBN'. 'Rok wydania' AS Rok. 'Opis', 'Cena'. Wydawnictwa.'Nazwa'
AS Wydawnictwo, GROUP_CONCAT(Autorzy.'Nazwa') AS Autor, Książki.Id AS Id FROM Książki. Autorzy. Wydawnictwa. KsiazkiAutorzy WHERE Książki.Id=$id AND Wydawnictwa.Id-Ksiazki.Wydawnictwold AND Książki.Id=KsiazkiAutorzy.'KsiążkaId' AND Autorzy.Id * KsiazkiAutorzy.Autorld GROUP BY Książki.Id