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 |
댓글