PROJECT/Chocolate_Web

2018.12.11 배운 내용 정리 (PHP PDO 연동)

최뭉뭉 2018. 12. 12. 22:14


어제는 스터디 센세님이 PHP에서 PDO를 연동하는 법을 알려주셨습니다!


요기다 써서 하나하나 분석해보도록 하지욥










<?php


☞ 요 문장으로 일단 php문을 스타뚜해줍니다!





include_once './dbconfig.php';


☞ 이 문장은 데이터파일을 가져올 때 사용하는 문장입니다! 외부의 파일을 현재 위치한 파일로 가져오는 거죠.


보통 상대경로로 지정을 해주는게 좋다고 합니다. 'http'로 시작하는 경로는 절대경로! 그리고 './dbconfig.php` 요런 식으로 넣어주는건 상대경로!


include와 include_once의 차이점은 once라는 단어가 "한 번"이라는 뜻이잖아요?


그래서 once가 붙으면 똑같은 파일은 단 한번만 로딩된다는 점이 차이점입니다! 자동으로 같은 파일을 다시 불러오는 걸 방지해주는 거죠





error_reporting(E_ALL);


ini_set('display_errors',1);


☞ 이 두 문장은 php 파일에서 에러가 났을 때 에러 메세지를 출력해주기 위한 문장입니다.


이 문장을 삽입해주지 않을 경우에는 에러가 나도 아무것도 화면에 뜨지 않아요 ㅠㅠ!


몇번째 줄에서 에러가 났는지 확인하고 싶다면 이 문장을 써주는게 좋답니당 :)







보시면 요게 HeidiSQL을 사용해서 제가 만들어둔 테이블인데요!


member라는 테이블에 여러가지 칼럼들이 추가되어있습니다.

데이터유형, 길이/설정, 코멘트 등도 제가 설정을 해뒀답니다 


그럼 이제 이 칼럼들에 직접적인 값들을 집어넣어야겠죠?


$m_id="sweatpotato@naver.com";

$m_pw="premiumchip123";

$m_name="자고마";

$m_nickname="자색고구마";

$phone_num="010-7777-9999";

$access_date=date("Y-m-d H:i:s");

$join_date=date("Y-m-d H:i:s");



☞ 그러기 위해선 이런 문장들이 필요하답니다.

m_index 칼럼은 auto_increment 값으로 자동 증가되기 때문에 값을 넣어줄 필요가 없구요

나머지 m_id, m_pw, m_name, m_nickname, phone_num, access_date, join_date에 세부적인 값을 넣어주시면 됩니다.


제가 저 때 고구마칩을 먹고 있어서 모든 값들이 다 고구마화되었다는...


date("Y-m-d H:i:s")라고 치면 현재 날짜와 시간이 불러와지는데요

Y=year/년도, m=month/월, d=day/일, H=hour/시간, i=minute/분, s=second/초 를 뜻합니다.





$hash_m_pw=hash('sha512',$m_pw);



☞ 문자열을 sha512 방식으로 암호화해주는 문장입니다. m_pw는 비밀번호를 뜻하기 때문에 암호화가 필요합니다.


물론 PASSWORD()로 암호화를 해주지면 보안은 매우 중요하니 한번더! 암호화를 시키는거죠~





$query="INSERT INTO `member` (`m_id`,`m_pw`,`m_name`,`m_nickname`,'phone_num`,`access_date`,`join_date`) VALUES (?,PASSWORD(?),?,?,?,?,?)";


☞ query에 SQL문으로 INSERT문을 사용했습니다.


member라는 테이블에 있는 m_id, m_pw, m_name, m_nickname, phone_num, access_date, join_date라는 칼럼에 ?값을 넣어줍니다.

직접적으로 값을 넣게 되면 보안에 문제가 있기 때문에, 인젝션 공격을 막기 위해서 라고 합니다.

placeholder(다른값을 덮어씌워주는것)의 역할을 하는 거죠!


SQL 인젝션 공격이란? 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이라고 합니다. 예를 들어, 비밀번호를 어떤 걸 치더라도 다 로그인이 되게 만드는? 그런 종류가 있다고 합니다.. 헤헷.. 


그리고 비밀번호 같은 경우는 PASSWORD()라고 치면 자동으로 암호화가 된다고 하네요 ! 위에서 한번더 해시 함수로 암호화를 해줬으니 완-벽!


SQL문 같은 경우에 안에 있는 따옴표는 ''가 아니라 ``로 해주셔야 된답니다. 헷갈리지 마세요 ㅠㅠ !




$result=$con->prepare($query);


☞ 여기서 화살표는 con 안에 있는 prepare라는 함수를 꺼내어 쓰겠다는 표시입니다.

prepare 함수는 ?라고 지정해둔 곳에 제가 정해준 변수를 넣기 위해 필요한 함수입니다.








그 다음 코드들입니다!




$m_array=array();


☞ m_array라는 배열을 하나 생성합니다.



$m_array[]=$m_id;

$m_array[]=$hash_m_pw;

$m_array[]=$m_name;

$m_array[]=$m_nickname;

$m_array[]=$phone_num;

$m_array[]=$access_date;

$m_array[]=$join_date;



☞그 배열들에 하나하나 칼럼값을 넣어줍니다!




$result->execute($m_array);



☞ result 안에 있는 execute(실행) 함수를 써줍니다. 그러면 말그대로 실행 완료!!





if ($result) {

    echo "등록 성공";


☞ 만약 값을 집어넣는데 성공했다면 "등록 성공"이라는 글귀가 화면에 출력되도록 만들어주는 문장입니다.

result 값이 있다면 "등록 성공"이라고 출력해라! 라는 뜻이죠




?>


☞ 괄호 닫아주는 것도 잊지 마시구욤 ㅎㅎㅎ


실행해보니까 화면에 "등록 성공"이라는 글자가 딱 표시되네요!







이상 어제 배운 내용 정리해봤습니다. 아직 모르는 점이 많아서 의문투성이이지만 알아가는 것들을 차곡차곡 정리해보려구요!


이게 쌓이고 쌓이다 보면 ㅠㅠ 어느새 IT 고수가 되어 있을거라 믿어 의심치 않습니다..! 그날까지 같이 노력해욧

'PROJECT > Chocolate_Web' 카테고리의 다른 글

2018.12.15 과제 내용 정리 (PHP PDO 테이블 출력)  (0) 2018.12.17