반응형
Web Development · PDO SELECT + LIKE
검색 폼 + LIKE 쿼리 —
부분 일치 검색 결과를 표로 출력
prepare + LIKE %키워드% + fetch 반복
시작 핵심 코드
// 검색어를 % %로 감싸 부분 일치 $search_key = '%'.$_POST['search_key'].'%'; $sql = "SELECT * FROM member WHERE last_name LIKE :last_name OR first_name LIKE :first_name"; $stmh = $pdo->prepare($sql); $stmh->bindValue(':last_name', $search_key, PDO::PARAM_STR); $stmh->bindValue(':first_name', $search_key, PDO::PARAM_STR); $stmh->execute(); while($row = $stmh->fetch(PDO::FETCH_ASSOC)){ // $row['id'], $row['last_name'], ... 표로 출력 }
1 LIKE — 부분 일치 검색
WHERE last_name LIKE '김%' -- "김"으로 시작 WHERE last_name LIKE '%김' -- "김"으로 끝 WHERE last_name LIKE '%김%' -- "김" 포함 (어디든)
%는 0개 이상의 모든 글자, _는 정확히 1글자.
2 %를 PHP에서 붙이는 이유
SQL 안에 '%:키%'처럼 적으면 안 된다 — bindValue가 검색어 전체를 한 문자열로 다루므로 %는 PHP 측에서 미리 붙여야.
// 안 됨 WHERE name LIKE '%:keyword%' // %, :keyword가 그대로 한 덩어리 // 됨 $key = '%' . $_POST['search_key'] . '%'; // PHP에서 결합 WHERE name LIKE :keyword bindValue(':keyword', $key);
3 fetch 모드
$stmh->fetch(PDO::FETCH_ASSOC) // 키-값 배열 (컬럼명 키) $stmh->fetch(PDO::FETCH_NUM) // 숫자 인덱스 배열 $stmh->fetch(PDO::FETCH_BOTH) // 둘 다 (기본) $stmh->fetch(PDO::FETCH_OBJ) // 객체 ($row->name) $stmh->fetchAll(...) // 모든 행을 한 번에 배열로
반응형
4 while로 한 행씩
while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) { // $row 한 행씩 처리 } // fetch가 더 없으면 false 반환 → while 종료
5 XSS 방어 — htmlspecialchars
이 코드는 출력 시 htmlspecialchars($row['last_name'])를 적용해 사용자 입력을 안전하게 표시. 좋은 습관.
핵심 한 줄 요약
LIKESQL 부분 일치 연산자
% 와일드카드0글자 이상 모든 글자
% 위치PHP에서 미리 붙여 bindValue
fetch(FETCH_ASSOC)한 행을 키-값 배열로
fetchAll모든 행을 한 번에 배열로
while loop한 행씩 반복 처리
XSS출력 시 htmlspecialchars 필수
반응형
'php' 카테고리의 다른 글
| PHP updateform — 세션 ID 저장 + 기존 값 채운 수정 폼 완전 정리 (0) | 2026.06.19 |
|---|---|
| PHP MYDB.php — DB 접속 코드를 함수로 분리 완전 정리 (0) | 2026.06.19 |
| PHP form + view + PDO INSERT — 트랜잭션 처리 완전 정리 (0) | 2026.06.19 |
| PHP PDO Prepared Statement — bindValue로 SQL 인젝션 차단 완전 정리 (0) | 2026.06.19 |
| PHP PDO 예외 처리 — try/catch + setAttribute 완전 정리 (0) | 2026.06.19 |
왕진 블로그

댓글