티스토리 뷰

WEB/WEB HACKING

1-11) PHP를 통한 DB제어

chrisysl 2018. 2. 24. 14:20

PHP를 통한 DB제어

PHP 에서 제공하는 MySQL라이브러리를 이용해서 PHP 문법으로 DB를 제어해보도록 하자.

모든 내용을 세세하게 다룰 수 없으므로, 본인이 직접 레퍼런스 사이트에서 자료를 찾아가며 확인할 수 있어야한다.

http://php.net/manual/en/function.mysql-query.php



# 기존에 만들어 둔 테이블은 모두 지워 비워두자.






PHP에서 MySQL로 DB쿼리를 보낼때 사용하는 함수 : mysql_query()







mysql_query() 함수를 이용하여 PHP에서 DB쿼리를 보냈을때의 결과는 

사용한 쿼리가 어떤것인지에 따라 그에대한 응답(Return Value)이 달라진다.


 - 입력(INSERT), 수정(UPDATE), 삭제(DROP) 쿼리를 보낼 시

 : 쿼리가 제대로 실행 됐는지 안됐는지를 리턴한다.

   (returns TRUE or FALSE)


 - 조회(SELECT, SHOW, DESCRIBE..) 쿼리를 보낼 시

 : 조건에 맞는 조회된 데이터가 있는지를 확인하고, 만약 있으면 그 결과를 리턴하고 없다면 FALSE를 리턴한다.

   (returns a resource on success, or FALSE on error)






우선 데이터를 새로 넣기위해 $_REQUEST 방식에 대해 알아보자.



# $_REQUEST : GET 과 POST를 구별하지않고 다 담을 수 있다.

위의 PHP 코드는 id 또는 pw 에 둘중 하나라도 값이 들어와있지 않은경우 (즉, 값이 NULL 일경우)

다시 값을 넣으라는 alert문을 출력하고, 그렇지 않은경우 잘 입력되었음을 alert문으로 알린다.



서버에서 실행되는 코드랑 클라이언트에서 실행되는 코드랑 섞여있기때문에 이해를 반드시 잘 해야한다.



# URL로 값을 전송(GET방식)하여도 값이 잘 넘어감을 확인할 수 있다.






# 이번엔 폼을 추가하여 id와 pw를 받아보자.






# form 을 받아오는 위치는 PHP코드 중간에(위의 예시에선 if문 사이에) 삽입하여도 상관없다.

PHP코드의 경계를 새로 넣어주기만 하면 된다.


PHP 코드가 위에서부터 코드를 쭉 읽어오며 내려오다가 if가 실행되면, 클라이언트가 form 을 실행시키게 되는 것이다.

만약 if문 위쪽에 form이 위치해 있다면 항상폼이 출력되어진다.

값이 없을때는 폼을 출력시키게 한것이고 있으면 넘어가도록 하기위해 if 안쪽에 form 형식을 걸쳐놓은것이다.






그다음 값이 입력됐으면 else로 들어가게 될테니, else에는 DB에 저장하는 쿼리를 쓰면 된다.

받아온값을 테이블에 넣는 쿼리를 작성하도록 하자.



 - 입력(INSERT)




# 위에서는 ($_REQUEST 에서는) GET 또는 POST방식을 가리지 않고 모두 값을 받아들인다.

근데 값이 없을땐 폼을 출력하고 있기 때문에, else문에서는 POST로 값을 받아오자.


else로 들어가면 성공적으로 값을 입력받은것이므로 테이블에 넣으면 된다.

입력받은 id 와 pw 를 새로운 변수로 입력받아, 쿼리라는 변수에 SQL문을 입력해준다.

이때 세미콜론은 문장내에서는 생략하고 변수마지막에만 넣는다.

즉 $query = "INSERT INTO user_info( id, pw) VALUE('$id', md5($pw) )"; 처럼

안쪽에 위치한 원래의 SQL문에서는 세미콜론으로 막아줘야하지만 해주지않는다는 것이다.


그다음 if문으로 입력이 성공적이면 해당 문장을 출력하도록 하였다.

#)_ 참고

INSERT INTO 다음에 VALUE 나 VALUES 둘다 상관없다.



# 입력이 잘 되었는지는 Xshell 창을 하나 더 켜서 테이블을 확인해보면 된다.






# 참고로, PHP 프로그램이 종료되지 않았으면 Refresh 상태가 계속 유지된다.

예시로는 무한루프를 집어넣어보았다. 

만약 그게 아니라면 그냥 페이지의 생명은 끝난것. 즉 세션이 끊긴 상태이다.






 - 조회(SELECT)


# 성공적으로 값이 들어왔을때, 기존에 존재하는 id인지를 판단하여

새로운 id일 경우 등록하고, 기존에 있는 id일 경우 해당 id의 개수를 출력하는 코드이다.


$query_select = "SELECT * FROM user_info WHERE id='$id'";

즉 WHERE 조건에 걸릴 때 특정 사용자가 있으면 해당 행개수를 출력한다.

행의 개수를 가져올때는 mysql_num_rows() 함수를 사용한다.






그럼 이번에는 SELECT의 결과를 가져와보도록 하자.

결과를 가져올때 자주 사용하는 함수로는


 - mysql_fetch_row() // 숫자를 키로 사용해서 결과를 가져옴

 - mysql_fetch_assoc() // 컬럼 이름을 키로 사용해서 결과를 가져옴

 - mysql_fetch_array()

등이 있다. 모두 한 줄의 리턴값을 배열형태로 가져온다.



# mysql_fetch_row() 과 mysql_fetch_assoc() 의 결과를 비교해보자.






mysql_fetch_row();    // 숫자를 배열의 키값으로 가져온다(인덱스)

mysql_fetch_assoc();  // 컬럼이름을 배열의 키값으로 가져온다






mysql_fetch_array() : 숫자와 컬럼이름 둘 다 키로 가져온다.(배열의 기본 키값과 컬럼의 이름을 둘다 표시해줌)






만약 중복된 값 모두를 가져오려면 어떻게해야할까?

갯수만큼 호출해주면 된다(반복문을 사용해서)


즉, num_rows 로 중복값의 전체 개수를 받아온다음에 for 또는 while 문으로 전체 출력시키면 된다.



# for문으로 중복값을 모두 출력할 수 있다.






이번에는 중복된 이름이 입력되면, pw를 새로 입력받은것으로 갱신해보도록 하자.



# UPDATE하여 비밀번호를 변경하였다. 






http://php.net/manual/en/ref.mysql.php

어떤 함수들이 있는지 손에 익혀두는게 좋다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함