본문 바로가기
PHP

[PHP] PHP와 데이터베이스 MYSQL확장

by 헤이봄봄 2022. 6. 16.

php는 정보를 저장할수 있는 기능이 없기때문에 데이터베이스를 사용하여 정보를 저장하는데 사용함

SQL : 데이터베이스를 제어할때 사용하는 언어 

 

php로 데이터베이스를 연결하는 방법에는 PDO, mysql확장, mysqli 등이 있다

mysql확장은 현재php 버젼에서는 더이상 지원하지않으나 레거시를 위한 학습으로서 알아두는 것이 좋다 .

 

PHP와 MYSQL의 연동

mysql_connect(host, user name, password) : 접속

mysql_select_db(디비명) : DB선택

mysql_query() : SQL 테이블 제어

 

 데이터 조회, 수정, 삭제 

<?php
    mysql_connect('localhost', 'root', '111111');
    mysql_select_db('opentutorials');
    switch($_GET['mode']){
        case 'insert':
            $result = mysql_query("INSERT INTO topic (title, description, created) VALUES ('".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['description'])."', now())");
            header("Location: list.php"); 
            break;
        case 'delete':
            mysql_query('DELETE FROM topic WHERE id = '.mysql_real_escape_string($_POST['id']));
            header("Location: list.php"); 
            break;
        case 'modify':
            mysql_query('UPDATE topic SET title = "'.mysql_real_escape_string($_POST['title']).'", description = "'.mysql_real_escape_string($_POST['description']).'" WHERE id = '.mysql_real_escape_string($_POST['id']));
            header("Location: list.php?id={$_POST['id']}");
            break;
    }
?>

$_GET['mode'] 

지금 GET방식으로 데이터를 받게끔 표현되고있는데 폼태그로 받을때 method를 POST로 보내더라도

action에서 "./process.php?mode=insert" 식으로 보내게되면

post방식이면서 동시에 get방식으로 보내는게 된다. 

 

mysql_real_escape_string()

사용자가 입력한 값을 가져올때 보안상 문제(sql문을 변조해서 공격한다거나하는 .. )가 발생할수있는 부분을 방지

입력에 대한 보안. 필터링이라고 함  

 

header("Location: list.php"); 를 넣어주면

서버에서 웹브라우저로 html 문서를 전달할때 

헤더에 Location: list.php이란 값을 함께 전달해주어 리다이렉션해준다. 

 

------------------------ 기타

mysql_fetch_array(sql문)

실제 갖고있는 행보다 더 많이 실행될 경우 false를 리턴

 

htmlspecialchars()

브라우저상에 태그로서 적용되지않고 문자 그대로를 노출하고싶을때 사용할 수 있는 함수 

입력폼에 스크립트태그를 사용하여 보안이슈가 발생하는것을 막을 수 있다

출력에 대한 것을 방어하는것. escaping

<?php
    echo htmlspecialchars('<h1>gg</h1>');
    echo '<h1>gg</h1>';
?>

 

empty()

인자로 전달된 값이 없으면 true를 리턴함

 

 

디버깅

mysql_error();

mysql확장기능을 사용하는 과정에서 마지막으로 발생한 에러를 출력시켜줌

mysql_errno();

에러의 타입을 숫자로 출력시켜줌

var_dump(mysql_connect(...))

리턴값으로 에러여부를 파악할 수도 있음 

'PHP' 카테고리의 다른 글

[PHP] PHP와 MySQL의 연동원리  (0) 2022.06.19
[PHP] 문자열 다루기  (0) 2022.06.16
[PHP] 이미지 다루기  (0) 2022.06.16
[PHP] 파일 업로드  (0) 2022.06.16
[PHP] 디렉토리 제어  (0) 2022.06.15

댓글