2012-04-11 29 views
0

特定の文字列/単語をクエリして、それに関連する結果の束をクエリしようとしていますが、SQL文に問題があります。
たとえば、現在のコードでproperty_code "TA001"を検索すると、TA001、CTA001、JTA001などを照会します。正確な提出結果のみが必要です。クエリの目的のための完全な文字列一致

私はLIKE関数を=で置き換えようとしましたが、ワイルドカード%を削除しても結果は返されませんでした。どんな助けもありがとう。ここでのコードは次のとおりです。この行で

<?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

を、なぜあなたはLIKEとワイルドカードを使用していますか% –

+0

あなたは正しいはずです:WHERE property_code = '$ searchquery' ..あなたはその情報を持っていると確信していますか?また、結果をエコーアウトするときにXSSに注意する必要があります。 – tcole

+0

'LIKE'クエリを' = '(など)に置き換えることは、まさに私が示唆したことでしょう。その列の値を調べて、完全一致の原因となる空白や予期しない文字がないかどうかを確認する必要があります。また、SQLインジェクションを防ぐためにPrepared Statement(PDO)を使用する必要があります。 –

答えて

1

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

あなたは「%と$ SEARCHQUERY間LIKE条件にスペースを持っている - それが問題一つです。

そして、あなたが$ 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}%'"; 
} 

そして、あなたは完全に一致するが、このてみたい場合:あなたが正確かどう

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

ありがとうございます。私はこのすべてを見て、私が見つけることができるものを見てみましょう – sammich

関連する問題