PHP-복수 선택한 데이터 검색하기
PHP-복수 선택한 데이터 검색하기
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>복수 선택된 데이터를 검색하고 싶을 때</title>
</head>
<body>
<div>
<?php
// h() 함수 레시피 218를 불러옵니다 레시피 041.
require_once '../../../../lib/h.php';
if (isset($_POST['data']) && count($_POST['data']) > 0) {
// 데이터베이스 설정 레시피 257을 불러옵니다 레시피 041.
require_once __DIR__ . '/../../../../conf/database_conf.php';
try {
// MySQL 데이터베이스에 접속합니다 레시피 257.
$db = new PDO($dsn, $dbUser, $dbPass);
$db-> setAttribute(POD::ATTR_EMULATE_PREPARES, false);
$db-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = $_POST['data'];
// SQL문을 준비합니다/
$where_in = implode(', :id', array_keys($data));
$sql = 'SELECT * FROM hobby WHERE id IN (:id' . $where_in . ')';
$prepare = $db->prepare($sql);
// SQL문의 플레이스 홀더에 값을 바인드하고 쿼리를 실행합니다.
for ($i = 0; $i < count($data); $i++) {
$prepare->bindValue(':id' . $i, (int) $data[$i], PDO::PARAM_INT);
}
$prepare->execute();
$result = $prepare->fetchALL(PDO::FETCH_ASSOC);
echo '<p>선택된 데이터 번호:' . h(implode(', ', $data)) . '</p>';
echo '<p>해당하는 검색 결과 :<br>';
foreach ($result as $row) {
echo h($row['id']) . ' : ' . h($row['name']) . '<br>';
}
echo '</p>';
// 오류가 발생한 경우 PDOException 예외가 발생하므로 캐치합니다
} catch (PDOException $e) {
echo '오류가 발생했습니다. 내용: ' . h($e->getMessage());
}
}
?>
<p>취미를 선택해 주세요</p>
<form method="post" action="multi_search.php">
<input type="checkbox" name="data[]" value="1">낚시
<input type="checkbox" name="data[]" value="2">영화 감상
<input type="checkbox" name="data[]" value="3">음악 감상
<input type="submit" value="전송">
</form>
</div>
</body>
</html>