본문 바로가기

개발과제

[노말틱 모의 해킹 취업반 1주차 개발과제 (4)] DB에 데이터를 넣고, 화면에 출력해보기

저희가 할 일은 크게 3가지 이겠네요!

 

 

-데이터베이스에 새로운 table 만들기

 

-서버랑 데이터베이스랑 연결하기

 

-데이터베이스 출력하기

 

참고로 데이터베이스 관련 언어나 문법은

https://opentutorials.org/course/3161/19531

 

데이터베이스의 목적 - 생활코딩

수업소개 데이터베이스와 스프래드쉬트의 유사점을 살펴봅니다. 이를 통해서 데이터베이스가 그렇게 낯선 것이 아니라는 것을 느끼셨으면 좋겠습니다. 또 웹애플리케이션에서 데이터베이스를

opentutorials.org

여기서 참고했습니다.

 

 

한번 차근차근해봅시다.

 

먼저 데이터베이스에 들어가 봅시다.

# sudo mysql

또는

# mysql -u root -p

 

 

 

그리고 저희 실습을 위한 데이터 베이스를 만들어 봅시다.

 

> CREATE DATABASE test;

 

쉽네요

 

그리고 확인하는 명령어는 SHOW입니다

> SHOW DATABASES;

입력해 봅시다

 

유용하네요

 

맨 밑에 test라는 데이터베이스가 만들어진 것을 볼 수 있습니다,

이제 test 데이터 베이스에 test라는 테이블을 만들어 봅시다.

 

> use test;

이것은 이제 test 데이터베이스에 들어가서 작업을 하는 것을 의미합니다

 

마치 작업현장에 들어가는 것처럼요

그리고 간단하게 test라는 table을 만들어 봅시다.

 

> CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,

                                      title varchar(45) NOT NULL,

                                      description text,

                                      created datetime NOT NULL,

                                      PRIMARY KEY(id) );

 

id,title,description,created, 기본키 설정까지 했습니다

 

그리고 잘 테이블이 만들어졌는지 확인해 봅시다

 

> DESC test;

DESC는 내림차순으로 왁인하는 것입니다.

 

잘 완성 됬네요!

 

물론 phpmyadmin을 이용해 데이터베이스를 만들 수 있습니다.

그거는 이 실습 끝내고 마지막에 설명해 드리겠습니다.

 

 

 

이제 데이터베이스랑 서버와 연동하는 코딩을 해봅시다!

참고는 여기서 하시면 됩니다!

https://www.php.net/manual/en/mysqli.construct.php

 

PHP: mysqli::__construct - Manual

mysqli can succeed in surprising ways, depending on the privileges granted to the user. For example,GRANT USAGE ON *.* TO 'myuser'@'localhost' IDENTIFIED BY PASSWORD 'mypassword';GRANT ALL PRIVILEGES ON `database_a`.* TO 'myuser'@'localhost';CREATE DATABAS

www.php.net

여기에 Procedural style을 이용합니다

밑으로 내리시다 보면 예시가 있습니다! 보시면서 하시면 이해가 더 쉽게 되실 거예요

 

 

간단하게 설명까지 해드리자면

 

mysqli_connect() : 나는 mysql에 접속을 할 것입니다.

string $hostname = ini_get("mysqli.default_host") :

    hostname 즉 데이터베이스 저장되어 있는 컴퓨터 위치를 뜻합니다!

    저희는 test 용으로 한 컴퓨터에 하고 있으니 localhost로 하면 되겠죠

 

 

string $username = ini_get("mysqli.default_user") 

    사용자 이름을 적으시면 됩니다! 저희는 sudo 즉 root 사용자로 했었죠?

    그럼 root 적으시면 됩니다 만약 다른 사용자 이름이 있다면 그걸로 하시면 됩니다.

 

 

string $password = ini_get("mysqli.default_user") 

    그 사용자의 비밀번호를 적으시면 됩니다. root 시면 그에 맞는 MySQL 비밀번호 적으시면 되는데

    지금은 코딩에서 적지만 원래는 코딩에 비밀번호를 적으시면 안 됩니다! 다른 방법은

    다음 포스팅에 말씀드리겠습니다

 

 

string $database : 

    저희가 만든 데이터 베이스 이름을 적으시면 됩니다. 저희 같은 경우 test를 적으시면 되겠죠?

 

Port는 mysql 서버가 사용하는 포트 번호를 지정하는 것입니다. 기본은 3306이에요.

그러니 안 적으셔도 알아서 3306으로 설정합니다 만약 자신의 mysql이 다른 포트 번호 이용하시면

그때 적으시면 됩니다.

 

socket은 소켓 파일 경로를 뜻합니다 만약 MySql이 TCP/IP 기반 통신이 아니라 Unix 소켓 파일을 사용하고 있다면

해당 파일의 경로를 지정해 주시면 됩니다. 만약 안 그러시면 생략 가능합니다

 

이러면 끝!은 아니죠

그리고 이 걸 conn에다가 저장했습니다. 이러면 이제 conn 호출이 이제 mysql 연결을 뜻하는 거죠.

 

당연히! root로 연결하는 것은 위험하니 따로 사용자 계정을 만들어서 이용하는 게 좋습니다!

.

.

 

일단 간단하게 insert 문법으로 test 테이블에 값을 추가해 봅시다!

 

mysql에 들어가셔서 적어봅시다.

> INSERT INTO test (title, description, created) VALUES('HAPPYHACKING','HACKING IS HAPPY CUZ HAPPY!', NOW());

 

NOW()는 현재 시간 저장 할 때 쓰입니다!

 

 

 

문자열 입력할땐 '' 잊지맙시다 에러 날때마다 흠칫 하네요 계속

 

그리고 확인해 봅시다.

 

> SELECT * from test LIMIT 1000;

 

LIMIT 1000 하는 이유는 나중에 저희가 데이터 베이스에 몇 천만 개 저장하고

그냥 SELECT * 해서 출력하면 난리가 나겠죠?

 

그래서 지금은 필요 없긴 한데 그래도 알아 두는 목적으로 적었습니다

 

잘 됬네요

그리고 코딩 부분으로 넘어갑시다

 

$sql에 "SELECT * FROM test"을 저장합니다 sql언어로 뭘 물어볼지 명령어 넣어 두는 거죠.

 

그리고 mysqli_query 함수 이용해 데이터베이스로 보내 보겠습니다.

https://www.php.net/manual/en/mysqli.query.php

 

PHP: mysqli::query - Manual

Hi, i created function that add  a new table using array , i work with it on my projects ... private_tables_name.$array["table"]." ";    $query .= "( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ".$info." )";                    return $query; 

www.php.net

참고하시면 됩니다

 

mysqli $mysql : mysql 연결한 링크를 넣는 것입니다.

string $query : query 즉 mysql 언어를 작성해 넣는 것입니다. 저희는 sql에다가 저장했었죠?

int $result_mode : 이 쿼리 보내서 나오는 결과를 메모리에 저장하는지 아니면 할당하는지 비동기 모드로 하는지 등 용도입니다. 생략 가능합니다!

 

그러니 코딩을 적어봅시다.

 

mysqli_query($conn,$sql);

 

인데 결과 값을 저장하기 위해 저는 result에 저장했습니다.

 

$result = mysqli_query($conn,$sql);

 

 

막상 적으면 별거 없네요

 

--이제 result을 출력하면 되겠네요??--

 

안됩니다. 저기에 저장된 result에는 MySQL상 언어로 적힌 결과 값이 있습니다. 즉 php언어가 아니라는 거죠

그래서 저희는 mysqli_fetch 함수를 이용해서 php언어로 바꾸겠습니다.

 

mysqli_fetch에 대한 설명은

 

https://www.youtube.com/watch?v=zvDrg6J9uv8&list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&index=12 

여기에 참고하시면 됩니다!

 

간단하게 정리하면

 

mysqli_fetch_ array : 값을 배열로 각각 나누어서 index값(0,1,2,...) 그리고 칼럼명으로 저장하고 가져온다,

즉 이 것은 하나의 행만 가져올 때 매우 유용하게 쓸 수 있습니다.

ex)$row = mysqli_fetch_array($result);

     echo $row['title']; //이렇게 title 부분만 가져와 출력 가능하다.

 

이것을 while과 이용해서

while($row = mysqli_fetch_array($result))

이렇게 쓰면

 

row에 한 행 저장하고

그다음 행 저장

그리고 다음 행...

다음 행이 없을 때까지 반복하게 되는 것입니다.

 

그러니 저희는

while($row=mysqli_fetch_array($result)) {

     echo $row["id"], $row["title"],$row["description"],$row["created"];

}

작성해서 한 행의 각 필드 값을 출력합시다.

 

이제 슬슬 머리가 아프네요 그래도 할만 하네요

이제 버프스위트로 open browser하시고 http://localhost/[파일명].php 해서 들어갑시다.

물론 apache2와 mysql 재시작하시면 좋아요

그러면!

 

쨘 어?

음 띄어쓰기를 안 해서 좀 지저분하네요 echo 문에 각각 row 사이에 " "을 넣고 다시 해보겠습니다.

 

이쁘면 좋잖아요

 

그냥 줄 바꿈 할껄..

그나마 이쁘네요 이렇게 글을 마치겠습니다

.

.

.

.

.

.

.

하기 전에 phpmyadmin 이용해 보겠습니다.

 

http://localhost/phpmyadmin 접속

ID는 root로 들어갑시다.

꼭이요!

 

그림 없는 mysql보단 보기 좋네요!

그럼 이제 옆에 보시면 저희가 방금까지 작업한 test 데이터 베이스가 보이시죠??

여기서 쉽게 작업 가능 합니다.

일단 root로 모든 작업을 하기엔 조금 보안에 위험하니 사용자 계정을 만들겠습니다.

 

위 메뉴바에 사용자 계정 들어가셔서 사용자 추가 버튼을 누릅시다.

 

그냥 누르기만 하면..

 

그리고 사용자 명을 뭘로 할까요 저는 user2로 하겠습니다.

오로지 저만 이용할 테니 호스트명은 아무 데서나가 아니라 로컬로 하겠습니다.

그리고 암호 설정 누르고 맨 밑에 권한 목록 보이시죠?

 

거기에 저는 데이터 란에 FILE 빼고 전부 체크

그리고 구조에는 CREATE, ALTER, INDEX, DROP 체크

그리고 관리에는 REFERENCES을 체크하고 생성하겠습니다.

 

어차피 개발만 하는 유저인데 다른 건 건들 이유가 없죠!

 

그리고 맨 아래로 내리셔서 실행!

그럼 user2가 생성 됐겠죠? 그리고 로그아웃하고 다시 로그인합니다.

왼쪽 위 상단 자세히 보시면 로그아웃 있어요

 

그리고 데이터 베이스 란에 가보시면 새 데이터 만들기 있죠?

거기에 저는 test2 하고 만들었습니다

test2
명령어는 사치

보시면 이렇게 테이블 이름과 칼럼을 작성만 하기만 하면 만들기가 가능합니다!

 

그리고 각 이름과 종류도 정해서 작성하시고 또 추가도 가능합니다

 

음..데이터관리자분들도 MySQL언어 싫어 했음에 틀림없네요

 

그저 적기만 하면 생성 가능하며 삭제도 가능하답니다!

 

그럼 한 번 test테이블과 똑같이 만들어 보겠습니다.

 

누르기만 하면 끝

그리고 저장 후 구조란에서 보면

 

Simple!

이렇게 생성이 간단하게 됩니다. 그리고 삭제 누르시면 체크된 게 삭제되고 

삽입 란에서 작성하셔서 넣으시면 끝입니다!

 

실행

 

알잘딱!

 

알아서 잘해줍니다.

 

이렇게 phpmyadmin 이용해 간단하게 사용자 계정 생성, 데이터베이스 생성, 테이블 추가, 삽입까지 해보았습니다

이게 가장 쉽죠! 또 php코드로 볼 수도 있답니다!

.

.

.

.

.

 

이렇게 글을 마치도록 하겠습니다