php 입문 | PDO를 사용한 데이터베이스 액세스 | PDO으로 테이블 데이터 검색하기

추가하여 목록 표시를 할 수 있게 되었으니, 다음은 “검색"을 해 보자. 검색은 처음에 했던 “레코드 목록 조회"와 유사하다. “seleft * from 테이블"로 조회를 한다. 그러나 이대로는 모든 레코드를 조회되기 때문에 조건을 설정해야 한다.

"select * from 테이블 where 조건"

테이블 이름 뒤에 “where"를 붙여서 그 다음에 조건을 지정한다. 조건은 “컬럼 = 값"과 같이 지정된 컬럼의 값을 지정한다. 등호 및 부등호를 사용하여 지정하는 것이 일반적이다. 예를 들어, sampletable에서 name이 “성진"인 데이터를 검색하고 싶다면,

select * from sampletable where name = '성진'

이런 식으로하면 된다. 그럼 앞의 index.php를 수정하여 이름을 검색하고 표시해보도록 하자. 아래와 같이 예제를 수정한다.

<?php
$result = "";
$query = "select * from sampletable";
if (isset($_POST['name'])){
    $fstr = $_POST['name'];
    if ($fstr != ''){
        $query .= " where name = '$fstr'";
    }
}
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query($query);
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . $column . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <form method="post" action="./index.php">
            <tr><td>검색 문장:</td><td><input type="text" name="name"></td></tr>
            <tr><td></td><td><input type="submit" value="송신"></td></tr>
        </form>
        </table>
        <hr>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

이번에는 입력 필드가 1개인 양식이 표시된다. 여기에 검색할 이름을 쓰고 실행하면 그 이름의 레코드 만 표시된다.

이번에는 먼저 $query ="select * from sampletable";와 같이 쿼리를 작성했다. 이는 모든 레코드를 검색한다. 이어서 if (isset($_POST['name'])) 이렇게 하여 $_POST['name']의 존재하는지 여부를 확인한다. 값이 있다면 $query .= " where name = '$fstr'"";과 같이 where 절을 쿼리에 추가하여 조건문이 쿼리에 포함된다. 이것으로 name은 $fstr인 경우만 찾게 된다.

이때, 단어를 정확하게 알지 못하면 검색을 하지 못하기에 일반적으로는 입력한 일부 단어로 검색하는 “퍼지(fuzzy) 검색” 하는 경우가 많다. 그런 경우는 “like"라는 비교 연산자를 사용한다. 이를 이용하여 검색 텍스트에 와일드 카드(*)를 사용할 수 있다.

where name like '원*'

예를 들어, where 절을 이렇게하면 name의 값이 “원"으로 시작하는 모든 데이터가 검색된다. “원석"도 “원식"도 “원"으로로 시작하는 것은 모두 찾을 수 있다.




최종 수정 : 2021-08-27