[MySQL] LIKE Abfrage liefert nur kompletten Datenbankinhalt

preko

Erfahrenes Mitglied
Hi,

ich habe in einem PHP Script folgende Passage, die ein selektives Ergebnis aufgrund eines Suchbegriffes aus einem Formular ausgeben soll:
PHP:
echo "<p>Sie suchen nach: <strong>".$_POST['suche']."</strong></p>";
$suche = $_POST['suche'];
if (isset($suche)){
				$db = @mysql_connect($host, $user, $password)
					or die ("Verbindung mit Datenbankserver fehlgeschlagen!");
				@mysql_select_db($database, $db)
					or die ("Verbindung mit Datenbank fehlgeschlagen!");
				$sql_query = "SELECT 
                    				            *
                    				          FROM 
                    				            `test_data`
                    				          WHERE 	
                    				            `titel`
                                                         OR
                    				            `plz`
                                                         OR
                    				            `suchbegriffe`
                    					    LIKE
                    				            '$suche%' 
                    					    ORDER BY
                    				            `titel` ASC; 					    			
				      			";		      						      							  
						  if( !$result = mysql_query($sql_query, $db) ) { 
						    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>"; 
						    exit; 
						  } 		
              $a=1;
						  while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
										  	if (isset($row['titel'])) {
										  	echo "<strong>".$a++.'.</strong> <a href="detailansicht.php&unique_id='.$row['unique_id'].'"><strong>'.$row['titel'].'</strong></a><br />';
										  }
										  else {
										  	echo "Es wurden keine passenden Daten zu Ihrem Suchbegriff gefunden";
										  }
						}
					}
Das Problem ist, dass alle Datensätze aus der Datenbank ausgegeben werden, anstatt nur die, die dem Suchbegriff entsprechen!

Ich glaube, ich sehe den Wald vor lauter Bäumen nicht. :confused:

Beste Grüße,
preko
 
Hi.

Das OR ist nur für Wahr-Falsch-Ausdrücke definiert und hat eine geringere Priorität als das LIKE.

Mit expliziter Klammerung:
SQL:
WHERE  `titel` OR `plz` OR (`suchbegriffe`  LIKE '$suche%')
Das heißt du hast überhaupt keine Einschränkung auf titel oder plz. Sie dürfen nur nicht NULL sein, was vermutlich für alle titel der Fall ist; so werden natürlich auch alle Einträge gefunden.

Wenn, dann mußt du die Einschränkung mit LIKE auch für titel und plz vornehmen.

Gruß
 
Zurück