[웹 서비스 개발] phpMySQL_Connection_2_24

김광일·2024년 11월 15일

웹 서비스 개발

목록 보기
35/45

일자 : 24-2 12주차 2차시 (3)

[1] PHP MySQL Insert Multiple Records

<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "root"; // 데이터베이스 사용자 이름
$password = ""; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// 여러 개의 SQL 쿼리 정의 (INSERT 문 여러 개)
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');"; // 첫 번째 레코드 삽입
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');"; // 두 번째 레코드 삽입
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')"; // 세 번째 레코드 삽입

// 여러 개의 SQL 쿼리 실행
if ($conn->multi_query($sql) === TRUE) { // multi_query()를 사용해 여러 SQL 쿼리를 실행
  echo "New records created successfully"; // 레코드 삽입 성공 시 메시지 출력
} else {
  echo "Error: " . $sql . "<br>" . $conn->error; // 삽입 실패 시 오류 메시지 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

여러 레코드를 한 번에 삽입하기 위해 multi_query를 사용하여 여러 INSERT 문을 실행하는 코드입니다.

[2] Get ID of The Last Inserted Record

  • If we perform an INSERT or UPDATE on a table with an AUTO_INCREMENT field, we can get the ID of the last inserted/updated record immediately
<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "root"; // 데이터베이스 사용자 이름
$password = ""; // 데이터베이스 사용자 비밀번호 (빈 문자열)
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// SQL 쿼리 정의: MyGuests 테이블에 새로운 레코드 삽입
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')"; // 'John', 'Doe', 'john@example.com' 값을 MyGuests 테이블에 삽입

// SQL 쿼리 실행 및 결과 확인
if ($conn->query($sql) === TRUE) { // 쿼리 실행 후 성공 여부 확인
  $last_id = $conn->insert_id; // 삽입된 레코드의 마지막 ID를 가져옴
  echo "New record created successfully. Last inserted ID is: " . $last_id; // 새 레코드 삽입 성공 시 ID 출력
} else {
  echo "Error: " . $sql . "<br>" . $conn->error; // 삽입 실패 시 오류 메시지 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

마지막으로 삽입된 레코드의 AUTO_INCREMENT ID를 insert_id 속성을 사용하여 가져오는 코드입니다.

[3] PHP MySQL Prepared Statements

  • Prepared Statements동일하거나 유사한 SQL 문을 반복적으로 실행할 때은 효율성을 위해 사용되는 기능이다.
  • Prepared Statements는 파싱 시간을 줄여준다.
  • Prepared Statements는 SQL 인젝션에 매우 유용하다.
<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "username"; // 데이터베이스 사용자 이름
$password = "password"; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// 준비된 문(Prepared Statement)과 바인딩
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); // MyGuests 테이블에 값을 삽입하기 위한 준비된 SQL 쿼리
$stmt->bind_param("sss", $firstname, $lastname, $email); // 파라미터 바인딩 (문자열 형식 "sss"로 $firstname, $lastname, $email 변수와 연결)

// 파라미터 설정 후 실행
$firstname = "John"; // 첫 번째 레코드의 첫 번째 이름 설정
$lastname = "Doe"; // 첫 번째 레코드의 성 설정
$email = "john@example.com"; // 첫 번째 레코드의 이메일 설정
$stmt->execute(); // 첫 번째 레코드 삽입

$firstname = "Mary"; // 두 번째 레코드의 첫 번째 이름 설정
$lastname = "Moe"; // 두 번째 레코드의 성 설정
$email = "mary@example.com"; // 두 번째 레코드의 이메일 설정
$stmt->execute(); // 두 번째 레코드 삽입

$firstname = "Julie"; // 세 번째 레코드의 첫 번째 이름 설정
$lastname = "Dooley"; // 세 번째 레코드의 성 설정
$email = "julie@example.com"; // 세 번째 레코드의 이메일 설정
$stmt->execute(); // 세 번째 레코드 삽입

echo "New records created successfully"; // 새로운 레코드가 성공적으로 삽입되었음을 출력

$stmt->close(); // 준비된 문 종료
$conn->close(); // 데이터베이스 연결 종료
?>

SQL 인젝션을 방지하고 효율적인 쿼리 실행을 위해 Prepared Statement를 사용하여 값을 바인딩하고 실행하는 코드입니다.

[4] Select Data From a MySQL Database

  • SELECT 문은 하나 이상의 테이블에서 데이터를 선택하는 데 사용된다.
SELECT column_name(s) FROM table_name
  • 또는 * 문자를 사용하여 테이블의 모든 열을 선택할 수 있다.
SELECT * FROM table_name
<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "username"; // 데이터베이스 사용자 이름
$password = "password"; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// SQL 쿼리 정의: MyGuests 테이블에서 id, firstname, lastname 컬럼을 조회
$sql = "SELECT id, firstname, lastname FROM MyGuests"; // SELECT 쿼리로 MyGuests 테이블에서 데이터를 가져옴
$result = $conn->query($sql); // 쿼리 실행 후 결과를 $result 변수에 저장

// 쿼리 결과가 존재하는지 확인
if ($result->num_rows > 0) { // 결과가 하나 이상 있으면
  // 각 행(row)의 데이터를 출력
  while($row = $result->fetch_assoc()) { // 결과에서 각 행을 연관 배열 형태로 가져옴
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; // 각 행의 id, firstname, lastname 출력
  }
} else {
  echo "0 results"; // 결과가 없으면 "0 results" 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

SELECT 문을 사용하여 MySQL 데이터베이스에서 특정 테이블의 데이터를 조회하고 출력하는 코드입니다.

[5] PHP MySQL ORDER BY 절 사용

  • ORDER BY 절은 결과 집합을 오름차순(ascending) 또는 내림차순(descending)으로 정렬하는 데 사용된다.
  • 기본적으로 ORDER BY 절은 레코드를 오름차순으로 정렬한다. 내림차순으로 정렬하려면 DESC 키워드를 사용한다.

SLECT column_name(s) FROM table_name ORDER BY column_name(s) ASC | DESC

1) 예시

<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "username"; // 데이터베이스 사용자 이름
$password = "password"; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// SQL 쿼리 정의: MyGuests 테이블에서 id, firstname, lastname 컬럼을 조회하고, lastname을 기준으로 정렬
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname"; // SELECT 쿼리로 MyGuests 테이블에서 데이터를 가져오고, lastname으로 오름차순 정렬
$result = $conn->query($sql); // 쿼리 실행 후 결과를 $result 변수에 저장

// 쿼리 결과가 존재하는지 확인
if ($result->num_rows > 0) { // 결과가 하나 이상 있으면
  // 각 행(row)의 데이터를 출력
  while($row = $result->fetch_assoc()) { // 결과에서 각 행을 연관 배열 형태로 가져옴
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; // 각 행의 id, firstname, lastname 출력
  }
} else {
  echo "0 results"; // 결과가 없으면 "0 results" 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

ORDER BY 절을 사용하여 특정 컬럼을 기준으로 결과를 오름차순 또는 내림차순으로 정렬하는 코드입니다.

[6] PHP MySQL 데이터 삭제

  • DELETE 문은 테이블에서 레코드를 삭제하는 데 사용된다
DELETE FRO table_name`
WHERE some_column = some_value
<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "root"; // 데이터베이스 사용자 이름
$password = ""; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// SQL 쿼리 정의: MyGuests 테이블에서 id가 3인 레코드를 삭제
$sql = "DELETE FROM MyGuests WHERE id=3"; // id가 3인 레코드를 삭제하는 쿼리

// 쿼리 실행 및 결과 확인
if ($conn->query($sql) === TRUE) { // 쿼리 실행 후 성공 여부 확인
  echo "Record deleted successfully"; // 레코드 삭제가 성공하면 메시지 출력
} else {
  echo "Error deleting record: " . $conn->error; // 삭제 실패 시 오류 메시지 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

DELETE 문을 사용하여 특정 조건에 맞는 레코드를 삭제하는 코드입니다.

[7] PHP MySQL 데이터 업데이트

  • UPDATE 문은 테이블에 있는 기존 레코드를 업데이트하는 데 사용된다.
UPDATE table_name
SET column1=value, colum2=value2, ...
WHERE some_column = some_value
<?php
$servername = "localhost"; // 데이터베이스 서버 이름 (로컬 서버)
$username = "root"; // 데이터베이스 사용자 이름
$password = ""; // 데이터베이스 사용자 비밀번호
$dbname = "myDB"; // 사용할 데이터베이스 이름

// 데이터베이스 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname); // MySQLi 객체를 사용하여 데이터베이스에 연결

// 연결 확인
if ($conn->connect_error) { // 연결에 오류가 있는지 확인
  die("Connection failed: " . $conn->connect_error); // 연결 실패 시 오류 메시지 출력 후 종료
}

// SQL 쿼리 정의: MyGuests 테이블에서 id가 2인 레코드의 lastname을 'Doe'로 업데이트
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; // id가 2인 레코드의 lastname을 'Doe'로 변경

// 쿼리 실행 및 결과 확인
if ($conn->query($sql) === TRUE) { // 쿼리 실행 후 성공 여부 확인
  echo "Record updated successfully"; // 레코드 업데이트가 성공하면 메시지 출력
} else {
  echo "Error updating record: " . $conn->error; // 업데이트 실패 시 오류 메시지 출력
}

$conn->close(); // 데이터베이스 연결 종료
?>

UPDATE 문을 사용하여 특정 조건에 맞는 레코드의 데이터를 수정하는 코드입니다.


다음 수업 예고


profile
안녕하세요, 사용자들의 문제 해결을 중심으로 하는 프론트엔드 개발자입니다. 티스토리로 전환했어요 : https://pangil-log.tistory.com

0개의 댓글