2011-05-16 3 views
0

태그 (배열)가 주어진 값과 같은 데이터베이스에서 모든 데이터 ID를 검색하려고합니다. 이주어진 값으로 SQL 배열에서 모든 데이터 검색

$new_string = 'nice phone'; 
$construct = mysql_query("SELECT tag_array, name, id FROM details 
WHERE tag_array LIKE $new_string%") 
or die("<p>died 20: $construct<br>" . mysql_error()); 

while($getThis = mysql_fetch_array($construct)){ 
echo $getThis['id'].'<br />'; 
echo stripslashes($getThis['name']).'<br />'; 
} 

그것은 ATALL 작동하지 않습니다 ... 내가 지금까지 한 일이다. 올바른 방향으로 안내해 주시겠습니까? 정말 고생 중입니다 !!

+1

"AT ALL에서 작동하지 않습니다." 그래서 * 어떤 일이 일어날까요? – lonesomeday

+0

작은 따옴표를 추가했습니다. 미안하지만 오타였습니다. 단어가 배열의 모든 단어와 일치하지 않습니다. 첫 단어에. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? – Buki

답변

1

따옴표 안에 $ new_string을 넣어야합니다.

참고 매우 나쁜 습관이고 항상 SQL에 전달할 모든 변수를 이스케이프 처리해야합니다. SQL 인젝션 및 기타 보안 문제에 대해 실제로 읽어야합니다.

또한 $ new_string을 tag_array에 일치 시키려면 (가장 가능성이있는) $ this_string 앞에 원하는 $ 기호를 추가해야합니다. MySQL reference manual에서 자세한 내용을 볼 수 있습니다. 당신이 좋아하는 쿼리에 넣어 전에 데이터를 살균한다

"SELECT tag_array, name, id FROM details WHERE tag_array LIKE '%" . mysql_real_escape_string($new_string) . "%'" 
+3

SQL 인젝션을 읽어야합니다. – Konerak

+0

@Konerak : 고마워요. 나는 그것을 알고 있지만, 단순히 도망 치는 것을 잊어 버렸다. – enoyhs

+0

작은 따옴표를 추가했습니다. 미안하지만 오타였습니다. 단어가 배열의 모든 단어와 일치하지 않습니다. 첫 단어에. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? – Buki

0

: 그래서 결국

그냥 SQL의 분사를 방지하는 데 도움이 비록

$new_string = "blah...; DROP TABLE tag_array; #"; 
    $sql = mysql_real_escape_string($new_string); 
    $sql = "SELECT tag_array, name, id FROM details WHERE tag_array LIKE %'$sql'%" 

이 충분하지 않습니다, 사용을 고려 데이터를 정리하는 정규 표현식. regexp에 대해 아직 모르는 경우이 사이트를 확인하십시오 : regexp info. 그것은 나를 도왔다.

+0

문제에 대한 의견을 추가하십시오 (downvoting). –

관련 문제