2016-12-11 5 views
0

Ich habe eine MySqL DB mit einer Tabelle von Eigenschaften NAMEN (kann mehr als ein Wort sein) und ich möchte eine Abfrage ausführen, um Ergebnisse für die Benutzer Texteingaben für ein Autocomplete-Feld zu verwenden.PHP SQL-Abfrage für Autovervollständigung

Die Abfrage, die ich zur Zeit verwenden ist:

$query = "SELECT * FROM table WHERE LOWER(name) LIKE '%$value%' LIMIT 7"; 

Aber es ist nicht gut genug.

Ich versuchte, den Eingang $ Wert Aufspalten aber aus irgendeinem Grund nicht funktioniert:

$values = explode(" ", $value); 

$str = ""; 
for($i = 0; $i < count($values); ++$i) 
{ 
    if($i == 0) 
     $str .= "LOWER(name) LIKE '%&$values[$i]%' "; 
    else 
     $str .= "AND LOWER(name) LIKE '%$values[$i]%' "; 
} 

$query = "SELECT * FROM table WHERE ". $str . " LIMIT 7"; 

Haben Sie Vorschläge?

TX im Voraus.

+0

** WARNUNG **: Dies hat einige schwere [SQL-Injection-Fehler] (http://bobby-tables.com/), weil '$ _GET 'Daten werden innerhalb der Abfrage verwendet. Wann immer möglich, verwenden Sie ** vorbereitete Aussagen **. Diese sind ziemlich einfach in [mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [PDO] (http://php.net/manual/ en/pdo.prepared-statements.php) wo alle vom Benutzer angegebenen Daten mit einem '?' oder ': name'-Indikator angegeben werden, der später mit' bind_param' oder 'execute' gefüllt wird, je nachdem, welchen du verwendest. ** NIEMALS ** $ _POST' oder '$ _GET' Daten direkt in Ihre Abfrage einfügen. – tadman

+0

@freewind hat meine Antwort geholfen? – divix

Antwort

0

Do OR statt AND in Ihrer Suchanfrage:

$str .= "OR LOWER(name) LIKE '%$values[$i]%' "; 
Verwandte Themen