PHP&MySQL 개념

evelynnness·2022년 4월 25일
0

PHP

목록 보기
2/2
post-thumbnail
PHP의 MySQL에 대한 API로서 MySQLi와 PDO 방식이 있고, PDO 방식은 오라클과 같은 다른 데이터베이스를 이용할 때에도 호환이 가능하다는 특징이 있다.

PHP를 통해 데이터베이스 접속할 때

$conn = mysqli_connect("localhost"{IP}, "root"{사용자}, "123456"{비밀번호}, "opentutorials"{우리가 사용할 데이터베이스 === 스키마});

에러메세지는 보안상의 문제로 절대로 사용자에게 노출해선 안된다. 

예를들어 오류가 발생했습니다. 관리자에게 문의해주세요. 와같은 메세지를 따로 출력해주고 우리는 로그를 통해 에러 확인 후 수정해야한다.

$result = mysqli_query($conn, $sql);
if($result === false){
echo mysqli_error($conn);

}

이런식으로 php 에러가 발생했을 때 에러를 출력하여 확인할 수 있지만, 웹페이지에 그대로 노출하면 보안상 위험하기 때문에 따로 파일에 보관하는 방법 등으로 하면 좋다.

$sql = "SELECT * FROM topic LIMIT 1000";

와 같이 웹페이지에 나타낼 떄는 리미트값을 줘야한다. (예를들어 데이터가 1억개 이상일 때 난리가 날 수 있기 때문에)

num_rows는 행의 갯수를 세준다.

PHP에서는 NULL을 false라고 본다.

while($row = mysqli_fetch_array($result)) {

echo '<h2>'.$row['title'].'</h2>';

echo $row['description'];

}

를 통해 NULL이 될때까지 반복해서 출력한다.

", '가 많아지면 한 코드 내에서 복잡해질 수 있고, 문자열을 끝내버릴 수 있기 때문에

/" /"를 통해 문자열을 끝내지 않고 따옴표를 추가해서 사용할 수 있다.

$filetered_id = mysqli_real_escape_string($conn, $_GET['id']);

이런식의 코드를 통해 악의를 가진 사용자가 데이터베이스에 악영향을 끼치는 행위를 막을 수 있다.

ex) DROP을 이용해 모든 파일이 날아가는 걸 방지할 수 있다.

$result = mysqli_query($conn, $sql);

멀티 쿼리보다는 위와같이 쿼리를 사용하여 작성하는 것이 보안에 더욱 좋다.

데이터베이스에서 --를 앞에 붙이면 아무런 일이 일어나지 않는다.

ex) --SELECT * FROM topic;

한 사용자가 악의를 품고 자바스크립트를 통해 다른 사용자가 무엇을 클릭했을 때 다른 사이트로 강제로 이동하게끔 할 수 있어 해당 코드를 사용하여 예방한다.echo htmlspecialchars('<script>alert</scrtipt>')

<script>location.href="https://opentutorials.org"</script>

한 사용자가 악의를 품고 자바스크립트를 통해 다른 사용자가 무엇을 클릭했을 때 다른 사이트로 강제로 이동하게끔 하거나 악의적으로 사용 할 수 있어 위와같은 코드를 사용하면 예방할 수 있다.

<script>location.href="https://opentutorials.org"</script> 이런식으로 코드 그대로 출력됨

생활코딩 MySQL 데이터베이스 작성 양식 (데이터베이스 연습할 때 사용하자)

mysql> CREATE TABLE author(
-> id INT(11) AUTO_INCREMENT,
-> name VARCHAR(30) NOT NULL,
-> profile VARCHAR(200) NULL,
-> PRIMARY KEY(id)
-> );

mysql> DESC author;

mysql> INSERT INTO author (name, profile) VALUES('egoing','developer');
mysql> INSERT INTO author (name, profile) VALUES('duru','DBA');
mysql> INSERT INTO author (name, profile) VALUES('taeho','Data Scientist');

mysql> ALTER TABLE topic ADD COLUMN author_id INT(11);
mysql> DESC topic;
mysql> SELECT * FROM topic;

mysql> UPDATE topic SET author_id=1 WHERE id=19;
UPDATE topic SET author_id=1 WHERE id=20;
UPDATE topic SET author_id=2 WHERE id=21;
UPDATE topic SET author_id=3 WHERE id=22;
UPDATE topic SET author_id=1 WHERE id=34;

mysql> SELECT * FROM topic;

mysql> SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

웹페이지에 표를 표현할 때 table 태그로 감싼다.

행은 tr태그

컬럼은 td태그

다양하고 복잡한 데이터베이스에서 편하게 검색 하기 위한 검색 관련 공부가 하고 싶다면 색인=index 공부해보기

나의 웹을 동일한 코드로 다양한 데이터베이스에서 실행하고 싶다면, Php Data Object (PDO)에 대해 공부해보기

데이터베이스를 안전하게 운영하기 위해 대기업들에게 데이터베이스 서버 운영을 맡긴다. 이러한 것들을 클라우드 컴퓨팅이라고 한다. (구글, 아마존 등등)
profile
개발 공부

0개의 댓글