2014-11-19 2 views
-1
<form name="attdate" action="keyword.php" method="post"> 
     Enter Keyword :<input name = "key"> 
     <button class='btn btn-lg btn-danger' type ="submit"> Search Records</button> 

와일드 카드 SQL 검색 PHP

내가 키워드 (와일드 카드) 검색 내 VARCHAR 필드를 조회하면된다하려고 : I 조회 할 행의 필드는 'HS는

''nv ''vsa '.

내 PHP는 다음과 같습니다

<?php 


include 'config.php'; 

$key = ($_POST['key']); 



$key = mysqli_real_escape_string($con,$key); 



$sql = "SELECT * FROM handover WHERE hs LIKE "%'.$key.'%" 
OR WHERE nv LIKE "%'.$key.'%" 
OR WHERE vsa LIKE "%'.$key.'%""; 


$result = mysqli_query($con,$sql); 

$count=mysqli_num_rows($result); 

if($count==0){ 

echo "</br></br></br></br></br></br></br><h2>Handover Details</h2><p> No Matching 

results found</p>"; 
} 
else{ 
while($row = mysqli_fetch_array($result)) { 
echo '</br></br></br></br></br>'; 

나는 내가 %를 걸었 곳이있을 것 같아요. 이 문제는 인덱스가 인덱스에 포함되어 있지 않은 것입니까? 사전

+0

** 경고 ** : 당신은 매개 변수가있는 쿼리를 사용하여 ['bind_param'] (HTTP한다 mysqli''사용하는 경우 : // php.net/manual/en/mysqli-stmt.bind-param.php)를 사용하여 사용자 데이터를 쿼리에 추가하십시오. ** 심각한 [SQL injection bug] (http://bobby-tables.com/)를 만들므로 문자열 보간을 사용하여 **이를 수행하지 마십시오. – tadman

답변

1
에서

덕분에, 당신의 인용 순서를 변경 한 처음에 시세 및 쿼리의 끝, 또는 그 반대를 배치

.

$sql = 'SELECT * FROM handover WHERE hs LIKE "%'.$key.'%" 
OR WHERE nv LIKE "%'.$key.'%" 
OR WHERE vsa LIKE "%'.$key.'%"'; 

은 또한 쿼리 문자열에 직접 변수를 주입하기보다는 쿼리를 parameterise해야합니다. 이 도움이 될 것입니다 당신 Prevent SQL Injection!

UPDATE : 매개 변수화 쿼리의 예 :

$mysqli = new mysqli("host", "user", "password", "database");// connection 
$key = $_POST['key']; 
$query = $mysqli->prepare("SELECT * FROM handover WHERE hs LIKE ? OR WHERE nv LIKE ? OR WHERE vsa LIKE ?"); // note how simple in this case, no quoting problems 
$stmt->bind_param("sss", $key, $key, $key); // binding a string which replaces ?, once for each ? (repeats in your case) 
$stmt->execute(); 
+0

안녕하세요, 저는 이것이 건 방하다는 것을 알고 있지만 위의 코드 예제를 매개 변수화 된 쿼리로 사용할 수 있습니다. 나는 여기에 코드를 넣었고 똑같은 말을 한 다음 쿼리를 매개 변수화하는 데 성공했지만 실패했습니다. 사람들이 코드가 위험하다고 말하지만 코드를 안전하게 만드는 방법은 알려주지 않습니다. 나는 프로그래머가 아니다. (Im a wannabee programmer). 이 안전하지 않은 쿼리를 작동시키기에 충분한 읽기가 필요했습니다. 나는 링크 (PHP)가 혼란을 발견!. 코드가 없으면 튜토리얼을 따라하기 쉽다고 누군가가 말할 수 있습니까? –

+0

간단한 예가 무엇입니까? 내 팬이라면 정상적인 게시물이 어떤 모양인지 알 필요가 없습니다. –

+0

나는 이것을 위해 @FintanCreaven –