[PHP] MySQL 다루기

Y·2024년 2월 16일

Web

목록 보기
6/8

데이터베이스 생성하기

XAMPP 에서 아래 사진과 같이 MySQL 이 start인 상태라면 phpMyAdmin 이라는 DB 접속 툴을 사용할 수 있다.

브라우저에 http://localhost/phpmyadmin/ 을 입력한 후, 사용자 계정 탭 에서 사용자 추가를 눌러 데이터베이스와 데이터베이스 사용자(user)를 만들 수 있다.

이때, 모든 권한을 체크 해야 한다.

테이블 생성하기

CREATE TABLE 테이블이름 (1이름,2이름, 
    인덱스 
) ENGINE = MySQL 엔진이름;

예시

CREATE  TABLE  `tbl_person` ( 
	//INT 정수 타입, AUTO_INCREMENT 자동 증가
    `person_id`  INT  NOT  NULL AUTO_INCREMENT ,
    //VARCHAR 문자열 타입, NOT NULL 비어 있으면 안 된다는 뜻
    `name`  VARCHAR(256) NOT  NULL , 
    `age`  INT NOT  NULL ,     
    PRIMARY  KEY (`person_id`) //각 열을 구별하는 유일한 식별자
) ENGINE = InnoDB;

테이블에 값 가져오기

SELECT 컬럼들 FROM 테이블명 WHERE 조건컬럼=조건값;

예시

//tb1_person 테이블에서 person_id가 1인 행들의 모든 컬럼 조회
SELECT * FROM  tbl_person  where person_id = 1;

테이블 값 입력하기

INSERT INTO 테이블명 (컬럼1, 컬럼2) values (컬럼1, 컬럼2);

예시

INSERT INTO tbl_person (name, age) values ('yse', 50);

SQL은 문자열을 감쌀 때 '(홑따옴표) 만 사용 가능하다.

테이블 값 수정하기

UPDATE 테이블명 set 컬럼1=컬럼1, 컬럼2=컬럼2where 조건

예시

UPDATE tbl_person set name='yse', age='30' where person_id = 1;

테이블 값 삭제하기

DELETE FROM 테이블명 where 조건

예시

DELETE FROM tbl_person  where person_id = 1;

PHP에서 MySQL 접속하기

php에서 데이터베이스에 접속하기 위해서는 PDO 내장 객체를 사용해야 한다. 데이터베이스에 연결하는 함수 db_get_pdo() 를 분리했다.

<?php
function db_get_pdo()
{
    $host = 'localhost'; // localhost는 본인의 컴퓨터라는 뜻
    $port = '3306';
    $dbname = 'php3min';
    $charset = 'utf8'; // 대부분 utf8 사용
    $username = 'php3min';
    $db_pw = "1234";
    $dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
    $pdo = new PDO($dsn, $username, $db_pw);
    return $pdo;
}
  • host 데이터베이스 서버의 주소
  • port 데이터베이스 서버의 포트, MySQL 데이터가 오가는 통로
  • dbname 데이터베이스 이름
  • charset 인코딩 방법
  • username 데이터베이스 사용자 이름
  • db_pw 데이터베이스 사용자 비밀번호
  • dsn 데이터베이스 연결 문자열
  • PDO 객체는 dsn, 사용자 이름, 사용자 비밀번호를 파라미터로 받아 데이터베이스에 연결하는 역할

PHP에서 MySQL 값 가져오기

저장된 값을 가져오는 함수를 db_select() 로 정한다.

function db_select($query, $param=array()){
    $pdo = db_get_pdo(); // MySQL에 접속하는 객체
    try {
        $st = $pdo->prepare($query);
        $st->execute($param); // 쿼리 실행
        $result =$st->fetchAll(PDO::FETCH_ASSOC); // 실행한 데이터 전부 가져오기
        $pdo = null; // 객체를 초기화해야 데이터베이스 커넥션이 끊김
        return $result;
    } catch (PDOException $ex) {
        return false;
    } finally { // 쿼리가 실패하거나 다른 문제가 생겨도 연결 끊음
        $pdo = null;
    }
}
// pdo 객체에서 쿼리를 세팅하면서 statement 객체를 리턴받음
$st = $pdo->prepare($query);

StatemenT 객체는 실제로 쿼리를 실행하는 역할이다. 플레이스 홀더(? / :이름)을 통해 쿼리에 파라미터를 전달한다.

fetch_style

이름설명예제
FETCH_ASSOC연관배열로 데이터를 가져옴.fetchALL(PDO::FETCH_ASSOC)
FETCH_CLASS객체 형태로 데이터를 가져옴. | 기호로 객체 타입 지정함.fetchALL(PDO::FETCH_CLASS | UserDataType)
FETCH_OBJ익명 객체 형태로 데이터를 가져옴. 자동으로 컬럼이 멤버변수화됨.fetchALL(PDO::FETCH_OBJ)
FETCH_NUM순차배열 형태로 데이터를 가져옴.fetchALL(PDO::FETCH_NUM)
FETCH_BOTHFETCH_ASSOC + FETCH_NUMfetchALL(PDO::FETCH_BOTH)

쿼리 실패할 경우 false를 반환한다.

DB_SELECT

파라미터가 없는 경우 db_select(쿼리 문자열); 형태로 사용한다.

db_select("select * from tbl_person");

파라미터가 있는 경우 db_select(쿼리 문자열, array(파라미터들)); 형태로 사용한다.

db_select("select * from tbl_person where person_id = ?", array(1))

쿼리에 파라미터를 전달하는 방법

  1. 쿼리 문자열 안에 ? 삽입하기
db_select("select * from tbl_person where person_id = ?", array(1))

위 구문은 아래와 같은 쿼리를 실행한다.

select * from tbl_person where person_id = 1
  1. 쿼리 문자열 안에 :키 삽입하기
db_select("select * from tbl_person where person_id = :person_id", array('person_id' => 1))

위 구문은 아래와 같은 쿼리를 실행한다.

select * from tbl_person where person_id = 1

PHP에서 MySQL 값 입력하기

function db_insert($query, $param = array())
{
    $pdo = db_get_pdo();
    try {
        $st = $pdo->prepare($query);
        $result = $st->execute($param);
        $last_id = $pdo->lastInsertId(); // 자동으로 설정되는 PK를 가지고 옴
        $pdo = null;
        if ($result) {
            return $last_id;
        } else {
            return false;
        }
    } catch (PDOException $ex) {
        return false;
    } finally {
        $pdo = null;
    }
}

var_dump(
    db_insert(
        "insert into tbl_person (name, age) values (?,?)",
        array("php", 25)
    )
);

var_dump(
    db_insert(
        "insert into tbl_person (name, age) values (:name,:age)",
        array("name" =>"php7", "age" => 5)
    )
);

PHP에서 MySQL 값 수정 / 삭제하기

function db_update_delete($query, $param = array())
{
    $pdo = db_get_pdo();
    try {
        $st = $pdo->prepare($query);
        $result = $st->execute($param);
        $pdo = null;
        return $result;
    } catch (PDOException $ex) {
        return false;
    } finally {
        $pdo = null;
    }
}

var_dump(
    db_update_delete(
        "update tbl_person set age=:age where person_id = :person_id", 
        array("age" => 4, "person_id" => 1) 
    )
);

var_dump(
    db_update_delete(
        "delete from tbl_person where person_id = ?", 
        array(3) 
    )
);

첨부된 링크를 참고하여 작성했습니다.

0개의 댓글