-
[SISS/웹 스터디] 2학기 6주차 스터디 - MySQL + PHP24-2 SISS/웹 2024. 11. 3. 23:50
: 6주차 10/28 ~ 11/03 [PHP & MYSQL] 01 ~ 07
1. 수업 소개
- php와 mysql을 연동하여동적으로 페이지를 생성하는 방법에 대해 배울 예정
2. PHP와 MySQL의 연동 원리
- 웹 브라우저의 index.php 파일 요청
- 웹 서버가 요청을 받음(웹 서버에서 처리할 수 없음을 확인)
- php(미들웨어)에 처리 요청
- 데이터를 mysql에서 읽어와 html 코드 생성
- 생성한 코드 제공
3.1. 수업 준비(웹 쪽)
- 새 파일 만들기
- index.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>웹</title> </head> <body> <h1>웹</h1> <ol> <li>에이치티엠엘</li> </ol> <h2>어서오십시오</h2> </body> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatem animi facilis quos, nostrum dolore doloremque? Quod iusto fugit delectus pariatur dolorum esse dolor sunt! Consectetur, eius! Earum nostrum necessitatibus in! </html>
3.2. 수업 준비(데이터베이스 쪽)
- 스키마 생성(opentutorials.topic)
CREATE DATABASE opentutorials; // 데이터베이스 생성 SHOW DATABASES; // 보기 use opentutorials; // opentutorials DB에 create table topic ( -> id int(11) not null auto_increment, -> title varchar(45) not null, -> description text, -> created datetime not null, -> PRIMARY KEY(id) -> ) ENGINE=InnoDB; show tables; // 테이블 보기 desc topic; // topic 테이블의 구성 보기
4. PHP Client로서 MySQL
- mysql 서버 제어
- mysql 모니터(클라이언트) 이용
- php(클라이언트)의 함수 이용
5. MySQL API 찾기
- php를 이용하여 mysql 접속하는 api(공식 문서 확인)
- mysqli(수업에서 사용)
- pdo_mysql(추천)
- 오라클 같은 다른 관계형 데이터베이스 사용 시 db 교체 용이(코드 수정이 필요 없음)
- 객체를 사용
- mysql(비추천)
- mysqli → https://www.php.net/manual/en/book.mysqli.php
- mysql improved
- 함수와 객체지향(권장) 두 가지 방법을 모두 사용할 수 있음
- mysql improved
6.1. mysqli_connect
- mysqli_connect(”DB 서버 주소”, “mysql 사용자명”, “비밀번호(직접 쓰지 않음)”, “DB명”)
- 인증 및 접속
- mysql 모니터와 같은 역할을 수행할 수 있도록 도움
- 로그 확인은 mysql general_log enable을 검색하여 시도해볼 수 있음
- 함수형 프로그래밍 시 사용
- 인증 및 접속
6.2. mysqli_query
- mysqli_query(mysqli_query 결과, “SQL문”);
- DB에 데이터 추가(절차식 형식)
/* php 파일을 로드할 때마다 추가가 됨 */ <?php $conn = mysqli_connect("localhost", "root", "20242024", "opentutorials"); mysqli_query($conn, " INSERT INTO topic (title, description, created) VALUE( 'MySQL', 'MySQL is ...', NOW() ) "); ?>
6.3. mysqli_error
- mysqli_error(오류 링크)
- 오류 메시지 확인(절차식 형식)
- 실제 개발 시에는 화면에 출력하지 않도록 주의(데이터베이스의 구조를 알 수 있음) → 파일로 저장해야함
- mysqli_query(결과 값)
- 오류 발생 시 false 반환
<?php $conn = mysqli_connect("localhost", "root", "20242024", "opentutorials"); $sql = " INSERT INTO topic (title, description, created) VALUE( 'MySQL', 'MySQL is ...', NOW() )"; $result = mysqli_query($conn, $sql); if($result == false) { echo mysqli_error($conn); } ?>
7. 활용 - 글 생성
- index.php
<?php $conn = mysqli_connect("localhost", "root", "20242024", "opentutorials"); $sql = " INSERT INTO topic (title, description, created) VALUE( 'MySQL', 'MySQL is ...', NOW() )"; $result = mysqli_query($conn, $sql); if($result == false) { echo mysqli_error($conn); } ?>
- create.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>웹</title> </head> <body> <h1>웹</h1> <ol> <li>HTML</li> </ol> <form action="process_create.php" method="POST"> <p><input type="text" name="title" placeholder="title"></p> <p><textarea name="description" placeholder="description"></textarea></p> <p><input type="submit"></p> </form> </body> </html>
- process_create.php
<?php $conn = mysqli_connect( 'localhost', 'root', '20242024', 'opentutorials'); $sql = " INSERT INTO topic (title, description, created) VALUES( '{$_POST['title']}', '{$_POST['description']}', NOW() ) "; $result = mysqli_query($conn, $sql); if($result === false) { echo '저장 오류'; error_log(mysqli_error($conn)); } else { echo '저장 성공 <a href="index.php">돌아가기</a>'; } ?>
- 오류 로그 확인
- …/apache/logs/error_log
'24-2 SISS > 웹' 카테고리의 다른 글
[SISS/웹 스터디] 2학기 5주차 스터디 - MySQL (3) 2024.10.06 [SISS/웹 스터디] 2학기 4주차 스터디 - MySQL (1) 2024.09.29 [SISS/웹 스터디] 2학기 3주차 스터디 - PHP (0) 2024.09.22 [SISS/웹 스터디] 2학기 2주차 스터디 - PHP (0) 2024.09.14 [SISS/웹 스터디] 2학기 1주차 스터디 - PHP (1) 2024.09.08