php 생활코딩 2019.03.03
생활코딩 따라하기 WEB2 - PHP _ CRUD를 MySQL로 구현해보기
실습 결과 : http://127.0.0.1:8080/index.php ( <— MAMP 실행 후, 브라우저 주소 창에 입력 ) 개발 환경 : MAC OS |
database 준비
MySQL 접속
cd /Applications/mampstack-7.1.26-2/mysql/bin
./mysql -uroot -p
데이터베이스 생성
CREATE DATABASE opentutorials;
show databases;
use opentutorials;
테이블 생성
create table topic(
id int(11) not null auto_increment,
title varchar(45) not null,
description text,
created datetime not null,
primary key(id)
)engine=InnoDB;
원리
php <-> MySQL server <-> MySQL Client( Monitor… )
(=MySQL Clien)
php MySQL api
Recommended API -> mysqli or PDO_MySQL
* 추천 : PDO_MySQL 객체를 기준으로 사용, 오라클 등과 손쉽게 연계(교체)할 수 있다.
MySQL = MySQL Improved
가이드 : http://php.net/manual/en/book.mysqli.php
데이터베이스 제어
함수방식 & 객체방식 : http://php.net/manual/en/mysqli.quickstart.dual-interface.php
실습
mysqli_connect( );
http://php.net/manual/en/mysqli.construct.php
connect_test.php
<?php
$link = mysqli_connect('localhost','root','ever1227','opentutorials');
if (!$link) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Success... ' . mysqli_get_host_info($link) . "\n";
mysqli_close($link);
?>
php 서버에서 어떤 일이 일어나는지 확인
키워드 : mysql general_log enable
mysqli_query()
$result = mysqli_query($conn,$sql);
var_dump($result);
var_dump($result ->num_rows);
mysqli_fetch_array()
$row = mysqli_fetch_array($result);
print_r($row);
//없으면 null
연관배열
echo '<h1>'.$row['title'].'</h1>';
while(boolean)
null = false
not null = true
파라미터를 sql 에 조합하기
$sql = "SELECT * FROM topic where id={ $_GET['id'] }";
배열에 담기
$article = array(
"title" => $row["title"],
"description" => $row["description"]
);
사용 시 -> $article['title']
속성 확인하기
print_r($article);
사용자를 통해 입력될 수 있는 부분은 모두 보안처리
URL의 경우
$filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
INPUT의 경우
mysqli_real_escape_string($conn, $_POST['title'])
개인적으로 헷갈리는 부분
if(isset($_GET['id'])){
$sql = "SELECT * FROM topic where id={$_GET['id']}";
$update_link = "<a href=\"update.php?id=". $_GET['id'] ."\">update</a> “; }
<p><input type="text" name="title" placeholder="title" value=“<?=$article['title'] ?>"></p>
<p><input type="text" name="title" placeholder="title" value="<?php echo $article['title'] ?>"></p>
자료형에 맞춰 인자값의 타입을 변환시키기
settype($_POST['id'], "integer");
SQL 넘기기 전에 브라우저에서 쿼리만 확인하기
die($sql);
필터링 : 크로스사이트스크립팅 공격을 방어하기 - htmlspecialchars
$escaped= array(
'name' => '',
'profile' => ''
);
if(isset($_GET['id'])){
/타입1
$filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
settype($filtered_id,"integer");
$sql="select * from author where id={$filtered_id}";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
//타입2
$escaped['name']= htmlspecialchars($row['name']);
$escaped['profile']= htmlspecialchars($row['profile']);
}
리다이렉트
header('Location : author.php');
관련 소스 : htdocs_2-1.zip <-- 첨부파일을 넣어야할 위치입니다.
|
+ 추가 수업 : 관계형 데이터베이스 적용 예제
테이블을 하나 더 추가 하고
테이블을 JOIN 해서 다시 CRUD하는 과정
조인 코드 예
$sql = "SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.id where topic.id={$filtered_id}";
관련 소스 : htdocs2-2.zip <-- 첨부파일을 넣어야할 위치입니다. |
이런... 이슈가 발생... <-- 이 부분이 먹지를 않는다..
$table_form .= '
<tr>
<td>'.$filtered['id'].'</td>
<td>'.$filtered['name'].'</td>
<td>'.$filtered['profile'].'</td>
<td><a href ="author.php?id='.$filtered['id'].'">update</a></td>
<td>
<form action="process_delete_author.php" method="post" onsubmit="conform(\'sure?\');">
<input type="hidden" name="id" value="'.$filtered['id'].'">
<input type="submit" value="delete">
</form>
</td>
</tr>
';
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
자가동력미션 01. 집에 있는 책들을 데이터 베이스화 하기 2- 2) 관련 정보 크롤링 하려다가 2-3) API 활용하기 (0) | 2019.03.18 |
---|---|
자가동력미션 01. 집에 있는 책들을 데이터 베이스화 하기 1-1)구상/엑셀로 정리하기 (0) | 2019.03.18 |
삼팔광땡 MYSQL 입문기 - MYSQL 삭제, 그리고 새로운 설치 (0) | 2019.03.02 |
생활코딩 따라하기 WEB2 - PHP _ CRUD를 FILE로 구현해보기 (0) | 2019.03.02 |
스프링 부트에서 토비 3.1 따라하기 : 1장 - 1.7 DI 의존관계 주입 (작성 중) (0) | 2019.02.28 |
댓글