답변:
실제로 매우 간단합니다.
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
이 %
설정 한 문자 (없음, 하나 또는 다수)을위한 와일드 카드입니다. 매우 큰 데이터 세트에서는 속도가 느려질 수 있으므로 데이터베이스가 커지면 전체 텍스트 인덱스를 사용해야합니다.
column LIKE '...'
대소 문자를 구분하지 않고 대소 문자를 구분 column LIKE BINARY '...'
합니다
LIKE
이 연산자는 두 개의 와일드 카드 문자를 사용하기 때문에 어떤 문자열을 확인하기 위해 제안 : %
와 _
. 즉, 문자열 $ needle에이 특수 문자 중 하나가 포함되어 있으면 결과가 전혀 예상되지 않습니다. 이 답장은 (-1), INSTR 답장은 (+1)입니다.
LIKE %...%
인덱스가 있으면 인덱스를 사용하지 않으므로 동일해야합니다. LIKE ...%
있는 경우 색인을 사용합니다. 성능이 중요한 문제인 경우 전체 텍스트 검색 (FTS)이 더 나은 방법입니다.
like
연산자 가있는 하위 문자열의 존재에 따라 정렬 할 수있는 방법이 없기 때문에 좋아합니다 . 로 instr
문구는 다음과 같이 주문할 수 있습니다select * from table order by instr(col1,"mystring")
WHERE `column` LIKE '%$needle%'
이것이 위험하다는 것을 명심하십시오 :
WHERE `column` LIKE '%{$needle}%'
먼저해라 :
$needle = mysql_real_escape_string($needle);
따라서 가능한 공격을 방지합니다.
mysql_real_escape_string
향후 PHP 릴리스에서는 더 이상 사용되지 않을 예정입니다.
$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
아마도 find_in_set
기능을 찾고있을 것입니다 :
Where find_in_set($needle,'column') > 0
이 함수는 in_array
PHP에서 함수처럼 작동합니다