2014-09-21 2 views
0

나는 진형 :상위로 MySQL의 문을 준비하고 같은

$check = $db->prepare("SELECT `id`, `name` FROM `this_table` WHERE UPPER(`name`) LIKE ?")or die($db->error); 

어떤 작동하지 않으며, 모든 행을 반환하지 않습니다. 더 깊이 들어 와서 다음을 보았습니다.

$check = $db->prepare("SELECT `id`, `name` FROM `this_table` WHERE UPPER(`name`) LIKE CONCAT('%', ?, '%')")or die($db->error); 

하지만 기쁨도 없습니다. 모든 대문자와 일반 대소 문자 모두에서 내 매개 변수를 사용해 보았습니다. 차이 없음. 이 세 가지를 결합하는 방법?

+1

일치하는 샘플 데이터를 표시하십시오. –

+0

어쩌면 실제 결과가 없다 : 제시된 코드로는 충분하지 않다. 좀 더 게시해야한다. – Ghost

+0

첫 번째 준비 문이 충분하다. like like가 'LIKE'% SOMECHARACTERS % '' – andrex

답변

0

당신은 %에 싸여 변수로 등을 전달해야

$val = '%some-value%'; 
$q = $db->prepare("SELECT id, name FROM this_table WHERE UPPER(name) LIKE ?"); 
$q->bindValue(1, $val); 
0

Q : 방법이 세 가지를 결합 할 수 있습니까?

A : 당신이 오류 메시지와 함께 실패 (오류 메시지와 함께 실패 준비 실행을 관찰하고 어떤 행동을 알고 귀하의 질문에 충분한 정보가 아니다는, 실행은 성공하지만, 어떤을 반환하지 않습니다 가져 오기 행을 반환하거나 예기치 않은 행을 반환하는 중 ...

게시 한 두 SQL 문의 구문이 유효합니다 (제공되는 정보에서 식별자의 유효성을 검사 할 방법이 없습니다. 데이터 유형, 권한 등)

name 열이 대소 문자를 구별하지 않는 collati on (즉, _ci으로 끝나는 문자 집합이며 클라이언트 문자 집합은 대소 문자를 구별하지 않으므로 UPPER() 함수의 사용은 필수는 아니지만 유효합니다. (여기에서 우리는 name 열이 VARCHAR 열로 정의되었지만 실제로는 단지 추측이라고 추측합니다.

일관성을 유지하기 위해 LIKE 비교의 두 측면이 모두 포함될 것으로 예상됩니다. UPPER() 함수 ...

'ABCD'의 name 값이 다음이 포함 것이다 당신이 bindParam가 제공 한 값을해야 할 것, 'BC'를 일치 와일드 카드 일치를 기대하는 경우
SELECT t.id 
    , t.name 
    FROM `this_table` t 
WHERE UPPER(t.name) LIKE UPPER(?) 
     ^^^^^    ^^^^^ 

, 와일드 카드 문자

제공하는 값이 단지 'bc' 인 경우 다음을 포함 할 수 있습니다. 두 번째 예에서와 같이 와일드 카드 문자는 CONCAT이고 문자는 '%'입니다.

SELECT t.id 
    , t.name 
    FROM `this_table` t 
WHERE UPPER(t.name) LIKE CONCAT('%', UPPER(?), '%') 
     ^^^^^       ^^^^^ 

그 외에도 제공 한 정보로 관찰하는 동작 만 추측하고 있습니다.

관련 문제