오늘부터는 PHP에서 MySQL을 다루는 방법을 공부하겠습니다.
공부하는 강좌는 당연히 생활코딩입니다!
https://opentutorials.org/course/3167
WEB3 - PHP & MySQL - 생활코딩
수업소개 PHP와 MySQL을 연동해서 웹의 접근성과 데이터베이스의 탁월한 정보관리 기능을 모두 갖춘 현대적인 웹애플리케이션을 구현하는 방법을 알려드리는 수업입니다. 수업대상 MySQL과 PHP의 경험이 있는 분 많은 사용자, 다양하고, 많은 정보로 인해서 한계를 느끼고 계신 분 참여조건 이 수업은 PHP와 MySQL에 대한 선행 지식이 필요합니다. 아래는 관련된 지식의 지도입니다. 지도를 참고해서 스스로 학습 경로를 탐험해보세요. 내용 이 수업은
opentutorials.org
이 강의를 보고 진행하겠습니다.
아 참고로 이번에 하는 공부는 강좌가 하나의 프로젝트로 진행하는 것 같습니다.
따라서 전체적인 프로젝트를 올리고 각 부분에 대한 설명을 하는 방식으로 서술할겁니다.
하지만 데이터 입력, 출력과 같이 기본적인 내용은 다른 php 파일을 만들어서 진행했으니, 기본적인 내용은 먼저 설명하고, 프로젝트 내용을 각 파일마다 설명하도록 하겠습니다.
먼저 시작하기 전에 php에서 mysql을 다루기 위한 가장 기본적인 명령어를 보고 가죠.
$conn = mysqli_connect("localhost", "root", "111111", "testdb");
mysqli_connect는 php에서 mysql을 연결하기 위해 사용하는 명령어입니다.
mysqli_connect( host, username, password, databasename, port, socket );
위에처럼 사용하는게 보통인데요.
저는 제 컴퓨터를 통해 실행하기 때문에 host는 localhost이고,
username은 테스트이기 때문에 최고권한인 root를,
password 또한 테스트이기 때문에 111111로 되어있고,
databasename은 testdb입니다.
(username과 password는 MySQL 상에서 만든 이름과 비밀번호입니다.)
다음으로
mysqli_query([연결 객체], [쿼리]);
mysqli_query입니다.
이는 현재 연결된 데이터베이스에 쿼리라는 명령어를 전달하는 명령어입니다.
저는 [연결 객체]에 mysqli_connect()함수를 담은 $conn 변수를 사용하여 사용할 데이터베이스를 정해주었고, $sql 변수에 mysql 명령어를 담아 [쿼리]에 사용했습니다.
이 두가지면 데이터베이스를 불러오고 명령어를 통해 내용을 호출할 수 있습니다.
이제 php을 통해 mysql에 데이터를 넣어보도록 합시다.
Insert
데이터를 php를 통해 MySQL에 입력하는 방법을 알아보도록 하겠습니다.
<?php $conn = mysqli_connect("localhost", "root", "111111", "testdb");
$result = mysqli_query($conn, " INSERT INTO topic (title, description, created)
VALUES( 'MySQL', 'MySQL is ....', NOW() )"); if($result == false) echo mysqli_error($conn);
?>
위의 코드를 통해 MySQL의 testdb 데이터베이스에 존재하는 topic 테이블에 데이터를 넣을 수 있습니다.
3번째 줄에서 mysqli_query 함수를 통해 이를 알 수 있죠.
하지만 이 코드는 데이터베이스에 넣을 값이 php의 내용에 미리 들어가서 해당 페이지의 사용자는 내용을 바꿀 수 없습니다. 이 경우 MySQL, MySQL is...의 내용을 변수로 처리하여 외부에서 받아온 데이터를 사용한다면 바꿀 수 있습니다.
마지막에서 3번째 줄 2번째 줄은 sql 명령어가 제대로 입력되었는지 확인하는 명령어입니다.
$result 가 sql값 입력에서 오류가 발생하면 false를 내보내게 되고 이 때문에 mysqli_error 함수를 통해 어떤 오류가 발생했는지 출력할 수 있게 됩니다.
sql 문에 오류가 없을 때 페이지를 실행시킨다면 빈 페이지가 나오며 topic 테이블에 mysql이라는 데이터가 들어가게 됩니다.
에러가 났을 때 페이지를 열면 위처럼 에러 문구가 발생하게 됩니다. INSERT에서 T를 빼먹고 써서 발생한 에러입니다.
이랬던 테이블이 페이지를 켜면
이렇게 데이터가 추가됩니다.
(author_id는 나중에 추가한 내용이라 Null값이 들어가있네요)
SELECT
<?php $conn = mysqli_connect("localhost", "root", "111111", "testdb");
// 1row
echo "<h1>single row</h1>";
$sql = "SELECT * FROM topic WHERE id = 10 LIMIT 100";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];
// all row
echo "<h1>multi row</h1>";
$sql = "SELECT * FROM topic LIMIT 100";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){
//값이 null이 될 때까지 출력하니까 전체를 출력할 수 있다.
echo '<h1>'.$row['title'].'</h1>'; echo $row['description'];
} ?>
다음은 테이블의 내용을 출력하는 방법입니다.
코드는 보다시피 1줄만 출력하는 코드와 전체를 출력하는 코드로 나뉘어있습니다.
페이지를 실행한 사진 먼저 보여드리겠습니다.
테이블의 데이터는 INSERT 부분에 있는 마지막 사진과 동일합니다.
제목과 내용만 출력되게 했습니다.
위에서 한 줄만 출력된 코드만 잘라서 보겠습니다.
<?php
$conn = mysqli_connect("localhost", "root", "111111", "testdb");
// 1row
echo "<h1>single row</h1>";
$sql = "SELECT * FROM topic WHERE id = 10 LIMIT 100";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];
?>
이렇게 생겼네요.
먼저 mysqli_connect()를 통해 sql의 testdb에 연결하는 $conn을 만들었습니다.
다음은 'single row' 문자열을 페이지에 출력합니다.
이 다음에
$sql = "SELECT * FROM topic WHERE id = 10 LIMIT 100";
큰따음표 사이에 있는 mysql 명령어를 해석하면 어떻게 되나요?
topic 테이블에서 10번 레이블의 전체 내용을 가져온다는 의미입니다.
이런 sql 구문은 $sql 변수에 집어넣고
$result변수에 가져온 데이터를 집어넣게 됩니다.
이후 mysqli_fetch_array() 함수를 통해 무언가를 하는데요.
mysqli_fetch_array 함수는 sql에서 가져온 데이터를 필드값과 레이블값을 배열 형태로 저장하는 함수입니다.
사용자가 잘 사용할 수 있게 정리해주는 역할이죠.
위의 코드에서
$row = mysqli_fetch_array($result);
를 통해 $row 변수로 원하는 데이터만 가져올 수 있도록 할 수 있습니다.
이 때문에 마지막 두 줄에서 title과 description에 해당하는 데이터를 출력할 수 있게 된 것이죠.
다음으로 모든 데이터를 출력하는 코드만 잘라서 보겠습니다.
<?php
$conn = mysqli_connect("localhost", "root", "111111", "testdb");
// all row
echo "<h1>multi row</h1>";
$sql = "SELECT * FROM topic LIMIT 100";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){
echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];
}
?>
이렇게 생겼다고 볼 수 있겠네요. $row 변수는 while문 조건문에 들어가있습니다.
이 코드는 한줄만 출력한 것과 거의 비슷합니다.
다른 점이라면
mysqli_fetch_array 함수가 배열 형태로 저장되어 있으며 함수를 사용할 때마다 다음에 해당하는 데이터를 출력하고 더 이상 출력할 데이터가 없으면 Null값을 출력한다는 점입니다.
이 점을 이용해서 while문을 사용했고
$row 변수가 null값을 출력할 때까지 반복하도록 되어있습니다.
따라서 title과 description 값을 끝까지 반복하여 출력하며 모든 레이블의 title과 description 값이 출력되게 됩니다.
여기까지! 일단 mysql을 php 상에서 사용하는 방법을 설명했습니다.
다음 포스팅에서 제가 작성한 것은 이를 변형한 것과 보안쪽에서 약간 손을 댄 정도입니다.
'Web-기초' 카테고리의 다른 글
회원가입, 로그인, 로그아웃 페이지 만들기 (1) | 2020.04.11 |
---|---|
PHP + MySQL 기초(2)完 (0) | 2020.04.11 |