본문 바로가기

MySQL에서 테이블을 생성하고 입, 출력 해보자(입력,출력,페이지네이션,검색)

반응형

MySQL에서 mp3라는 테이블을 생성하고, 두 개의 텍스트 필드인 sub와 suburl을 추가하는 SQL 쿼리는 다음과 같습니다.

CREATE TABLE mp3 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sub TEXT,
    suburl TEXT
);

여기서는
id는 기본 키로 설정되며, 자동으로 증가합니다.
sub와 suburl은 텍스트 타입의 필드입니다.
이 쿼리를 MySQL 데이터베이스에서 실행하면, mp3 테이블이 생성되고 두 개의 텍스트 필드가 추가됩니다. 

필요한 경우 id 외에 다른 필드들도 추가할 수 있습니다.

 

데이터 입력

대량 데이터를 MySQL에 입력하기 위해서는 여러 가지 방법을 사용할 수 있습니다. 
PHP에서 대량의 데이터를 배열로 관리하고, 이를 데이터베이스에 삽입하는 가장 일반적인 방법 중 하나는 
INSERT 문을 여러 번 사용하는 것이지만, 데이터가 많을 경우 성능을 고려하여 INSERT ... VALUES 문을 사용하여 
한 번에 여러 행을 삽입하는 것이 좋습니다.

다음은 PHP에서 대량 데이터를 배열로 입력하는 방법의 예제입니다:

데이터 배열 준비: 데이터 배열을 준비합니다.
데이터베이스 연결: MySQL 데이터베이스에 연결합니다.
INSERT 쿼리 생성: 데이터 배열을 기반으로 INSERT 쿼리를 생성합니다.
쿼리 실행: 쿼리를 실행하여 데이터를 삽입합니다.

다음은 PHP 코드 예제입니다.

<?php
// 데이터베이스 연결
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error);
}

// 대량 데이터 배열
$data = [
    ['제목1', '주소1'],
    ['제목2', '주소2'],
    ['제목3', '주소3'],
];

// 쿼리 시작 부분
$sql = "INSERT INTO mp3 (sub, suburl) VALUES ";

// 배열을 기반으로 쿼리 값 부분 생성
$values = [];
foreach ($data as $row) {
    $sub = $conn->real_escape_string($row[0]); // 제목
    $suburl = $conn->real_escape_string($row[1]); // 주소
    $values[] = "('$sub', '$suburl')";
}

// 최종 쿼리 문자열 생성
$sql .= implode(', ', $values);

// 쿼리 실행
if ($conn->query($sql) === TRUE) {
    echo "새 레코드가 성공적으로 삽입되었습니다.";
} else {
    echo "오류: " . $sql . "<br>" . $conn->error;
}

// 연결 종료
$conn->close();
?>

여기서는 id 필드가 AUTO_INCREMENT로 설정되어 있기 때문에 INSERT 쿼리에 id를 포함하지 않아도 됩니다. 
sub와 suburl만 데이터를 삽입할 필드로 지정하고, 나머지 필드는 자동으로 처리됩니다.

 

입력된 데이터를 MySQL 데이터베이스에서 불러오는 방법은 SELECT 쿼리를 사용하는 것입니다. 
PHP를 사용하여 MySQL에서 데이터를 조회하는 기본적인 방법은 다음과 같습니다.

데이터베이스 연결: MySQL 데이터베이스에 연결합니다.
쿼리 작성: SELECT 쿼리를 작성하여 원하는 데이터를 조회합니다.
쿼리 실행 및 결과 처리: 쿼리를 실행하고 결과를 처리합니다.

 

다음은 PHP에서 데이터를 조회하는 예제 코드입니다.

<?php
// 데이터베이스 연결
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error);
}

// 쿼리 작성 (모든 데이터 조회)
$sql = "SELECT id, sub, suburl FROM mp3";

// 쿼리 실행
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 결과 출력
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 제목: " . $row["sub"]. " - 주소: " . $row["suburl"]. "<br>";
    }
} else {
    echo "결과가 없습니다.";
}

// 연결 종료
$conn->close();
?>

이 코드에서는 
데이터베이스 연결: mysqli를 사용하여 MySQL 데이터베이스에 연결합니다.
쿼리 작성: SELECT id, sub, suburl FROM mp3 쿼리를 작성하여 mp3 테이블의 모든 데이터를 조회합니다.
쿼리 실행 및 결과 처리: query 메서드를 사용하여 쿼리를 실행하고, fetch_assoc 메서드를 사용하여 결과를 연관 배열로 가져와 출력합니다.
연결 종료: 데이터베이스 연결을 종료합니다.
필요에 따라 쿼리를 수정하여 특정 조건에 맞는 데이터만 조회하거나, 정렬 등의 작업을 추가할 수 있습니다. 
예를 들어, 특정 조건을 추가하려면 WHERE 절을 사용하면 됩니다.

$sql = "SELECT id, sub, suburl FROM mp3 WHERE id > 10";

 

페이지네이션

 

데이터를 페이지네이션하여 불러오는 방법은 SQL 쿼리와 PHP를 함께 사용하여 구현할 수 있습니다. 
일반적으로 페이지네이션을 구현할 때는 현재 페이지 번호를 기준으로 데이터를 분할하여 조회합니다.

다음은 PHP와 MySQL을 사용하여 페이지네이션을 구현하는 방법의 예제입니다:

현재 페이지 번호: URL 또는 사용자 입력을 통해 현재 페이지 번호를 받습니다.
쿼리 작성: LIMIT과 OFFSET을 사용하여 페이지별로 데이터를 조회합니다.
총 페이지 수 계산: 전체 데이터의 총 개수를 조회하여 페이지 수를 계산합니다.

다음은 PHP에서 페이지네이션을 구현하는 코드 예제입니다.

<?php
// 데이터베이스 연결
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error);
}

// 페이지 설정
$items_per_page = 20; // 페이지당 항목 수
$page = isset($_GET['page']) ? intval($_GET['page']) : 1; // 현재 페이지 번호
$offset = ($page - 1) * $items_per_page; // OFFSET 계산

// 총 데이터 수 조회
$total_sql = "SELECT COUNT(*) AS total FROM mp3";
$total_result = $conn->query($total_sql);
$total_row = $total_result->fetch_assoc();
$total_items = $total_row['total'];
$total_pages = ceil($total_items / $items_per_page); // 총 페이지 수

// 페이지별 데이터 조회
$sql = "SELECT id, sub, suburl FROM mp3 LIMIT $items_per_page OFFSET $offset";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 결과 출력
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 제목: " . $row["sub"]. " - 주소: " . $row["suburl"]. "<br>";
    }
} else {
    echo "결과가 없습니다.";
}

// 페이지 네비게이션 출력
echo "<br>페이지: ";
for ($i = 1; $i <= $total_pages; $i++) {
    if ($i == $page) {
        echo "$i "; // 현재 페이지는 링크 없이 표시
    } else {
        echo "<a href='?page=$i'>$i</a> "; // 페이지 링크
    }
}

// 연결 종료
$conn->close();
?>

이 코드에서는
현재 페이지 번호: $_GET['page']를 통해 현재 페이지 번호를 받아옵니다. 기본값으로 1을 설정합니다.
OFFSET 계산: ($page - 1) * $items_per_page로 현재 페이지에 해당하는 데이터의 시작 위치를 계산합니다.
총 데이터 수 조회: 전체 데이터의 개수를 조회하여 총 페이지 수를 계산합니다.
데이터 조회: LIMIT과 OFFSET을 사용하여 현재 페이지에 해당하는 데이터를 조회합니다.
페이지 네비게이션 출력: 페이지 번호를 링크로 출력하여 페이지 간 이동이 가능하도록 합니다.
이 방법을 사용하면 대량의 데이터를 페이지별로 나누어 효율적으로 조회할 수 있습니다.

 

제목으로 검색 기능을 추가

사용자가 입력한 검색어를 기반으로 데이터베이스에서 관련 항목을 검색할 수 있습니다. PHP와 MySQL을 사용하여 제목으로 검색 기능을 추가하는 방법은 다음과 같습니다:

  1. 검색어 입력: 사용자로부터 검색어를 입력받습니다.
  2. 쿼리 작성: 입력받은 검색어를 기준으로 WHERE 절을 사용하여 데이터를 조회합니다.
  3. 페이지네이션 적용: 검색된 결과에 대해 페이지네이션을 적용합니다.

다음은 PHP에서 제목으로 검색 기능과 페이지네이션을 구현하는 코드 예제입니다.

<?php
// 데이터베이스 연결
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("연결 실패: " . $conn->connect_error);
}

// 검색어 가져오기
$search = isset($_GET['search']) ? $conn->real_escape_string($_GET['search']) : '';

// 페이지 설정
$items_per_page = 20; // 페이지당 항목 수
$page = isset($_GET['page']) ? intval($_GET['page']) : 1; // 현재 페이지 번호
$offset = ($page - 1) * $items_per_page; // OFFSET 계산

// 검색 조건 추가
$search_condition = $search ? "WHERE sub LIKE '%$search%'" : '';

// 총 데이터 수 조회
$total_sql = "SELECT COUNT(*) AS total FROM mp3 $search_condition";
$total_result = $conn->query($total_sql);
$total_row = $total_result->fetch_assoc();
$total_items = $total_row['total'];
$total_pages = ceil($total_items / $items_per_page); // 총 페이지 수

// 페이지별 데이터 조회
$sql = "SELECT id, sub, suburl FROM mp3 $search_condition LIMIT $items_per_page OFFSET $offset";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 결과 출력
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 제목: " . $row["sub"]. " - 주소: " . $row["suburl"]. "<br>";
    }
} else {
    echo "결과가 없습니다.";
}

// 페이지 네비게이션 출력
echo "<br>페이지: ";
for ($i = 1; $i <= $total_pages; $i++) {
    if ($i == $page) {
        echo "$i "; // 현재 페이지는 링크 없이 표시
    } else {
        echo "<a href='?page=$i&search=" . urlencode($search) . "'>$i</a> "; // 페이지 링크
    }
}

// 검색 폼 출력
?>
<form method="GET" action="">
    <input type="text" name="search" value="<?php echo htmlspecialchars($search); ?>" placeholder="제목으로 검색">
    <input type="submit" value="검색">
</form>

<?php
// 연결 종료
$conn->close();
?>

이 코드에서는

  1. 검색어 입력: $_GET['search']를 통해 검색어를 입력받습니다. real_escape_string을 사용하여 SQL 인젝션을 방지합니다.
  2. 검색 조건 추가: 검색어가 있는 경우 WHERE sub LIKE '%$search%' 조건을 추가하여 제목을 기준으로 데이터를 조회합니다.
  3. 페이지네이션 적용: 검색된 데이터에 대해 페이지네이션을 적용하여 LIMIT과 OFFSET을 사용하여 페이지별 데이터를 조회합니다.
  4. 검색 폼 출력: 사용자가 검색어를 입력할 수 있는 폼을 출력합니다. 폼을 제출하면 현재 페이지와 검색어를 유지하면서 결과를 조회합니다.

이 방법을 사용하면 사용자가 입력한 검색어를 기준으로 제목을 검색하고, 페이지별로 결과를 효율적으로 표시할 수 있습니다.

반응형

댓글


Copyright ⓒ SmartWeb All rights reserved.