2012-04-11 6 views
0

Ich versuche, eine bestimmte Zeichenfolge/ein bestimmtes Wort abzufragen und eine Reihe von Ergebnissen abzufragen, aber es gibt ein Problem mit der SQL-Anweisung.
Zum Beispiel: wenn ich versuche und suche nach property_code "TA001" mit dem aktuellen Code, wird es zurück TA001, CTA001, JTA001, etc. Ich will nur das genaue gesendete Ergebnis.Genaue Übereinstimmung der Zeichenfolge für Abfragezwecke

Ich habe versucht, ersetzen die LIKE-Funktion mit einem = und auch die Platzhalter% s entfernen, würde aber keine Ergebnisse zurückgeben. jede Hilfe würde geschätzt werden. hier ist der Code:

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
$search_output = ""; 
if(isset($_POST['searchquery']) && $_POST['searchquery'] != ""){ 
$searchquery = preg_replace('#[^a-z 0-9]-#i', '', trim(strtoupper($_POST['searchquery']))); 
if($_POST['filter1'] == "properties"){ 
    $sqlCommand = "(SELECT id, property_code, street, street2, city, state, zip FROM properties WHERE property_code LIKE '% $searchquery %')"; 
} else if($_POST['filter1'] == "vendor"){ 
    $sqlCommand = "SELECT id, vendor_name FROM vendor WHERE vendor_name LIKE '%$searchquery%'"; 
} 
    include_once("database.php"); 
    $query = mysql_query($sqlCommand) or die(mysql_error()); 
$count = mysql_num_rows($query); 
if($count > 1){ 
    $search_output .= "<hr />$count results for <strong>$searchquery</strong><hr />$sqlCommand<hr />"; 
    while($row = mysql_fetch_array($query)){ 
     $id = $row["id"]; 
     $property_code = $row["property_code"]; 
     $street = $row["street"]; 
     $street2 = $row["street2"]; 
     $city = $row["city"]; 
     $state = $row["state"]; 
     $zip = $row["zip"]; 
     $search_output .= "Item ID: $id: - $property_code, $street, $street2, $city, $state $zip<br />"; 
      } // close while 
} else { 
    $search_output = "<hr />0 results for <strong>$searchquery</strong><hr />$sqlCommand"; 
} 
} 
?> 
+1

, wenn Sie genau wollen, Warum verwenden Sie LIKE und Wildcard% –

+0

Sie haben recht, es sollte sein: WHERE property_code = '$ searchquery' .. Sind Sie sicher, dass Sie eine Zeile mit diesen Informationen haben? Außerdem müssen Sie sicherstellen, dass Sie vorsichtig mit XSS sind, wenn Sie Ihre Ergebnisse zurückgeben. – tcole

+0

Das Ersetzen der 'LIKE'-Abfrage durch ein' = '(usw.) ist genau das, was ich vorgeschlagen hätte. Sie sollten sich die Werte in dieser Spalte ansehen, um festzustellen, ob Whitespaces oder andere unerwartete Zeichen die genaue Übereinstimmung verursachen. Außerdem sollten Sie prepared statements (PDO) verwenden, um eine SQL-Injektion zu verhindern. –

Antwort

1

In dieser Zeile:

$sqlCommand = "(SELECT id, property_code, street, street2, city, state, zip FROM properties WHERE property_code LIKE '% $searchquery %')"; 

Sie einen Raum in LIKE Zustand bekommen haben zwischen ‚% und $ SEARCH - das Problem ein.

Und wenn Sie vielleicht nur Datensätze beginnend mit $ SEARCH String suchen wollen versuchen, es wie folgt aus:

if($_POST['filter1'] == "properties"){ 
$sqlCommand = "SELECT id, property_code, street, street2, city, state, zip FROM properties WHERE property_code LIKE '{$searchquery}%'"; 
} else if($_POST['filter1'] == "vendor"){ 
    $sqlCommand = "SELECT id, vendor_name FROM vendor WHERE vendor_name LIKE '{$searchquery}%'"; 
} 

Und wenn Sie genaue Übereinstimmung dies wollen versuchen:

if($_POST['filter1'] == "properties"){ 
    $sqlCommand = "SELECT id, property_code, street, street2, city, state, zip FROM properties WHERE property_code = '{ $searchquery'"; 
} else if($_POST['filter1'] == "vendor"){ 
    $sqlCommand = "SELECT id, vendor_name FROM vendor WHERE vendor_name = '{$searchquery}'"; 
} 
+0

danke Jungs. Ich werde in all das sehen und sehen, was ich finden kann, das funktioniert – sammich

Verwandte Themen