Vyhľadávanie v PHP a MySQL je súčasťou takmer každej webovej aplikácie. Zdrojové kódy a vysvetlenie fungovania malého vyhľadávania nájdete v tomto článku.
Možností ako vyhľadávať v databáze MySQL reťazce pomocu PHP je veľa. Asi najlepším a najrýchlejším spôsobom vyhľadávania je, ak využívate databázové indexy. V tomto článku sa nimi ale zaoberať nebudeme ale prejdem na vyhľadávanie bez ich pomoci. Ako prvé čo by sme si mali vytvoriť alebo predstaviť je tabuľka s ktorou bude PHP a databáza pracovať.
CREATE TABLE clanky( id MEDIUMINT UNSIGNED NOT NULL auto_increment, nadpis VARCHAR(96) NOT NULL, obsah TEXT NOT NULL, PRIMARY KEY(id) );Vyhľadávanie bude fungovať rozšírene(viz. roz. vyhľadávanie) urobíme si prostý formulár a ten bude pre vyhľadávanie zatiaľ stačiť. Na výber bude zadanie reťazca a potom vybranie akým spôsobom chcete vyhľadávať. Či v nadpise alebo v obsahu článku. Prvé čo spravíme bude vloženie textu resp. článku do tabuľky. Môžeme si vybrať akýkoľvek text napr. tento:
INSERT INTO clanky(nadpis,obsah) VALUES( 'Konfigurácia PHP a Apache', 'PHP sa konfiguruje veľmi lahko. Apache je veľmi dobrý server a dobre sa mi s ním pracuje. Mám rád aj jeho mod-rewrite.' )Nadpis bude "Konfigurácia PHP a Apache". Ostatný text bude obsah článku uložený v stĺpci "obsah". Myslím, že teraz môžeme pristúpiť k súboru na pripojenie do databázy. Súbor sa bude volať mysql.php. Vložíme do neho nasledujúci kód:
<?php #mysql.php $dbc = mysql_connect("localhost","login","heslo") OR die("Chyba spojenia!<br />n"); mysql_select_db("databaza") OR die("Systém nenašiel tabuľky!<br />n"); ?>Ak nerozumiete niektorým funkciám môžete si ich bližšie preštudovať v článku PHP pre začiatočníkov - Databázy, 11.diel. Teraz ak už sme pripojený do databázy a pripravený vyhľadávať reťazec môžeme začať. Prvé čo urobíme je súbor vyhladavanie.php a vložíme do neho nasledujúci kód:
<?php #vyhladavanie.php require_once("mysql.php"); if(isset($_GET[retazec])){ if(empty($_GET[retazec])){ $retazec = FALSE; $error = "Nezadali ste reťazec pre vyhľadávanie!<br />n"; } else { $retazec = $_GET[retazec]; } if($_GET[podla] == "nadpis"){ $podla = "nadpis"; } elseif($_GET[podla] == "obsah"){ $podla = "obsah"; } if($retazec){ echo "Výsledky vyhľadávania <strong>$retazec</strong>!<br />n"; $retazec = explode(" ",$retazec); $sql = "SELECT nadpis FROM clanky WHERE $podla LIKE '%".$retazec[0]."%'"; for ($num=1;$num<count($hladaj);$num++) { $sql .= "$sql AND $podla LIKE '%".$hladaj[$num]."%'"; } $sql = "$sql ORDER BY id DESC"; $vysledok = mysql_query($sql); $pocet = mysql_num_rows($vysledok); if($pocet == NULL){ die("Zadaný reťazec sa v databáze nenachádza!<br />n"); } while($zaznam = mysql_fetch_object($vysledok)){ $nadpis = $zaznam->nadpis; echo "$nadpis<br />n"; } unset($nadpis); echo "<hr />Výsledkov: <strong>$pocet</strong> | <a href='javascript:history.back()' title='Späť'>Späť</a><br />n"; } else { echo $error; } } else { echo "<form action='{$_SERVER[PHP_SELF]}' method='get'>n"; echo " <fieldset><legend>Zadajte reťazec</legend>n"; echo " Text:<br /><input name='retazec' type='text' /><br />n"; echo " Hľadaj...<br /><select name='podla'>n"; echo " <option value='nadpis'>V nadpise</option>n"; echo " <option value='obsah'>V obsahu</option>n"; echo " </select><br /><br />n"; echo " <input type='submit' value='Vyhľadaj' />n"; echo " </fieldset>n"; echo "</form>n"; } ?>V zdrojovom kóde si môžete všimnúť formulár na spodku stránky. Pokiaľ nieje odoslaný zobrazí sa. Ihneď po jeho vyplnení a odoslaní sa spracuje. Spracovanie prebieha, tak že sa zadaný reťazec premení na pole pomocou funkcie explode(" ",$retazec). Zadaný reťazec rozdelí na polia len tam kde sú medzeri. Následne vyhľadáva obsah databázy a pokúša sa nájsť zadaný reťazec. Ak má pole $retazec viac ako jednu hodnotu, tak začne vyhľadávať pomocou cyklu v databáze ďalšie hodnoty pola s databázy. Je jedno koľko ich je, pretože cyklus for ich bude vyhľadávať donekonečna kým nevyčerpá všetky hodnoty pola.