Wildcard Matching

Timo_B

Mitglied
Hallo an alle :)

Ich suche ein gutes Tutorial zum Thema Wildcard Matching für eine Suchfunktion. Ich habe bei Google nichts gefunden. Bitte Helft mir!

Gruß
Timo
 
Zuletzt bearbeitet:
Hallo nochmal ich hab jetzt was gefunden, aber bin mir nicht sicher obs das ist:

PHP:
$sql = 'SELECT * FROM `Tabelle` WHERE `Spalte` LIKE %'.$_POST['suchfeld'].'% ORDER BY `ID` ASC';
 
Sieht schon gut aus.
Habe hier noch die Beschreibung aus dem MySQL Manual

% Matches any number of characters, even zero characters
_ Matches exactly one character

Da ich nicht den restlichen Code kenne, würde ich bei diesem Beispiel sagen,das die die Variable $_POST['suchfeld'] nicht einfach so an mysql weiterreichen solltest, da sonst SQL Injection möglich ist. Besser vorher die Suchanfragen entschärfen und auf Schadcode untersuchen.
 
Ich hab das mal ausprobiert. Bei den Platzhalter muss man aufpassen, dass sie in den Anführungsstrichen vom Searchstring sind und nicht ausserhalb oder dass gar keine Anführungsstriche vorhanden sind.

Ich hab nun folgenden Code:
PHP:
$search_string = mysql_real_escape_string($_POST['search_string']);
$sql = "SELECT BookmarkID, Title, Url
FROM bookmarks
WHERE Title LIKE '%".$search_string."%' OR Url LIKE '%".$search_string."%'
ORDER BY 'BookmarkID' ASC";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_array($result);
?>
und gleich darunter das Formular
Code:
<h1>
		Sie sind hier: <?php echo $breadcrump; ?>
</h1>
<p>
	<table border="0">
		<?php while($row){ ?>
			<tr>
				<td>
					<?php echo $row['*']; ?>
				</td>
			</tr>
		<?php } ?>
	</table>
</p>

Wenn ich nun etwas suche, das in den angegebenen Zellen der angegebenen Tabelle vorhanden ist, so erhalte ich folgende Fehlermeldung:
No suitable nodes are available to serve your request.
Wenn aber der String, den ich in die "Suchmaske" eingebe, nicht in der Datenbank in den angegebenen Feldern vorhanden ist, so wird mir die Ergebnisseite schön korrekt angezeigt (einfach ohne Ergebnisse, da es ja keine Treffer gibt).
 
Danke für die Hilfreichen Antworten:

Ich hab auch noch ein Tutorial gefunden wo folgender Befehl kommt:

Code:
SELECT * FROM sides
WHERE MATCH (spalte1,spalte2,spalte3) AGAINST ('$begriff')

aber bei mir hilft das nichts... ich find 0 Ergebnisse. Und mit der anderen Methode kommt was gutes raus. Welches is besser? Und warum geht die eine Methode nicht?
 
Zurück