2012-04-11 6 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 주입 방지를 위해 준비된 문 (PDO)을 사용해야합니다. –

답변

1

: 여기에 코드입니다

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

당신은 %와 $ SEARCHQUERY '사이 LIKE 조건의 공간을 가지고있다 - 그 문제 하나입니다.

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}%'"; 
} 

을 그리고 당신이 원하는 경우 정확히 일치하는이 시도 :

그리고 검색 할 경우 $의 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