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";
}
}
?>
, wenn Sie genau wollen, Warum verwenden Sie LIKE und Wildcard% –
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
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. –