Prostujemy:
$zapytanie = "select title from suggest where title LIKE '%$search%' LIMIT 10";
Nie zapisuj zmiennych niejawnie w stringu. Tu nawet nie chodzi o optymalizowanie jakiekolwiek, w takim zapisie gdzie wszystko jest wrzucone do jednego wora łatwo się pogubić. Koloryzatory składni mają problemy z kolorowaniem takich zmiennych no i najczęściej jest to jakaś furtka XSS.
$zapytanie = 'select title from suggest where title LIKE \'%' . $search . '%\' LIMIT 10';
Dwa:
Ty jesteś świadom tego co robisz? W skrypcie suggest.js masz:
var str = text.responseText.split("n");
Przecież to jest splitowanie według literki "n", tym samym wywalając ją ze stringa. Użyj JSON.
//...
$zapytanie = "select title from suggest where title LIKE '%$search%' LIMIT 10";
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows;
//tworzymy tablicę $wyniki
$wyniki = array();
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
$wyniki[] = (string)$wiersz['title']; //zapisujemy wynik do tablicy
}
//$str .= "empty"; - tego nie potrzebujemy
echo json_encode($wyniki); // http://php.net/json_encode - konwertujemy na format rozumiany przez JavaScript żeby łatwiej tego użyć.
}
//...
I potem tylko w suggest.js:
response = eval(text.responseText); //ewaluujemy kod, jeśli chcesz wiedzieć dokładnie dlaczego wykonujemy wynik przeczytaj czym jest JSON, ważne.
I "response" stanie się JavaScriptową tablicą dzięki użyciu konwersji wyniku do JSON w PHP. Resztę kodu (wybieranie danych z tej tablicy) napisz sam :)
Trzy: Znak wieloznaczności (%) na samym początku LIKE to zło! Nie zoptymalizuje tego żaden indeks, przez co za każdym wyszukiwaniem będzie leciała pętla po wszystkich wynikach. To bardzo nieoptymalne, lepiej zrezygnować z podpowiadania między wyrazami na rzecz dopowiadania po prostu końcówki.