[PHP 웹개발] MySQL 데이터베이스에서 mysqli(MySQL Improved) 사용법  

PHP에서 MySQL 데이터베이스에 연결해서 작업하는데 사용되는 API 가 세 종류 있습니다.

 

1. mysql API : 가장 오래전 부터 사용되어져 오는 것으로 mysql_ 로 시작하는 함수들로 구성되어 있습니다. 현재는 deprecated 되어서 더이상 사용하지 않는 것이 좋습니다.

 

2. mysqli (mysql improved) API (PHP 5, PHP 7) : mysql 함수를 개선한 것으로 prepared statement 를 사용할 수 있습니다.

 

3. PDO (PHP Data Object) API (PHP 5 >= 5.1.0, PHP 7) : PDO 는 PHP 를 사용하여 서로 다른 종류의 데이터베이스에 접근하는 공통 API 를 제공하는 것을 목표로 만들어 졌습니다. 객체 기반의 API 이고, prepared statement를 제공합니다.

 


이 중에서 mysqli 를 사용하는 방법을 알아 보겠습니다. mysqli 에서는 prepared statement 를 사용할 수 있게 되어서, 입력값에 대한 복잡한 제거나, 치환 작업 없이 SQL 인젝션 공격에 대한 방어를 할 수 있습니다. mysqli 는 객체지향 스타일(객체 메소드 호출 형태)의 API 와 절차지향 스타일(함수 호출 형태)의  API 를 제공합니다. 여기에서는 절차지향 스타일의 예를 보도록 하겠습니다.

 

 

1. 데이터베이스 연결하기

 

<?php
$db_conn = @mysqli_connect("localhost", "my_userid", "my_password", "my_db");
if (!$db_conn) {
    $error = mysqli_connect_error();
    $errno = mysqli_connect_errno();
    print "$errno: $error\n";
    exit();
}
mysqli_close($db_conn);
?>

 

mysqli_connect 함수의 인자는 다음과 같습니다.


"localhost" : 데이터베이스 서버의 IP 또는 도메인 주소
"my_userid" : 데이터베이스 사용자 아이디
"my_password" : 데이터베이스 사용자 비밀번호
"my_db" : 사용할 데이터베이스명

 

이외에 기본 포트 3306 을 다른 것으로 변경하였다면, 다섯번째 인자에 새 포트를 입력하면 됩니다.


 

2. 간단한 조회 쿼리 사용하기

 

<?php
$query = "SELECT no, title, content FROM board";
$result = mysqli_query($db_conn, $query);

if ( $result ) {
    echo "조회된 행의 수 : ".mysqli_num_rows($result)."<br />";

    while ($row = mysqli_fetch_assoc($result)) {
        printf ("%s : %s <br />", $row["no"], $row["title"]);
    }

    // 결과 해제
    mysqli_free_result($result);

} else {
    echo "Error : ".mysqli_error($db_conn);
}
?>

 

$result로 부터 결과를 가져오는데는 다음 세 가지 함수를 사용할 수 있습니다.

 

- $row = mysqli_fetch_assoc($result); :  연관배열을 반환합니다. 컬럼명 ( $row['no'] ) 으로 값을 가져 올 수 있습니다. 컬럼명은 대소문자를 구분합니다.
- $row = mysqli_fetch_row($result); : 숫자 인덱스의 배열을 반환합니다. ( $row[0] )
- $row = mysqli_fetch_array($result); :  연관배열과 숫자 인덱스 배열을 모두 사용할 수 있습니다.

 

3. 파라미터를 가지는 조회 (prepared statement 사용하기)

 

<?php
$query = "SELECT no, title FROM board WHERE title LIKE ? AND no > ?";
$keyword = "%제목%";
$no = 5;

$stmt = mysqli_prepare($db_conn, $query);
if($stmt === false) {
    echo('Statement 생성 실패 : ' . mysqli_error($db_conn));
    exit();
}

$bind = mysqli_stmt_bind_param($stmt, "si", $keyword, $no);
if($bind === false) {
    echo('파라미터 바인드 실패 : ' . mysqli_error($db_conn));
    exit();
}

$exec = mysqli_stmt_execute($stmt);
if($exec === false) {
    echo('쿼리 실행 실패 : ' . mysqli_error($db_conn));
    exit();
}

$result = mysqli_stmt_get_result($stmt);
if ( $result ) {
    echo "조회된 행의 수 : ".mysqli_num_rows($result)."<br />";

    while ($row = mysqli_fetch_assoc($result)) {
        printf ("%s : %s <br />", $row["no"], $row["title"]);
    }
    // 결과 해제
    mysqli_free_result($result);
    // statement 해제
    mysqli_stmt_close($stmt);

} else {
    echo "Error : " . mysqli_error($db_conn);
}
?>

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

mysqli_stmt_bind_param($stmt, "si", $keyword, $no); 에서 처럼 파라미터 타입을 나타내는 문자열이  두 번째 인자로 주어지고, 그 위에 파라미터들을 입력합니다. $keyword 는 문자열이므로 "s", $no 는 정수이므로 "i" 를 각각 지정합니다.

 

파라미터 타입 문자열에 사용되는 값은 다음과 같습니다.

- i : integer
- d : double
- s : string
- b : blob

 

 

4. 입력, 수정, 삭제 쿼리 수행하기

 

<?php
$query = "INSERT board (no, title) values (?,?)";
$no = 5;
$title = "제목";

$stmt = mysqli_prepare($db_conn, $query);
if($stmt === false) {
    echo('Statement 생성 실패 : ' . mysqli_error($db_conn));
    exit();
}

$bind = mysqli_stmt_bind_param($stmt, "is", $no, $title);
if($bind === false) {
    echo('파라미터 바인드 실패 : ' . mysqli_error($db_conn));
    exit();
}

$exec = mysqli_stmt_execute($stmt);
if($exec === false) {
    echo('쿼리 실행 실패 : ' . mysqli_error($db_conn));
    exit();
}

echo "영향을 받은 행의 수 : ".mysqli_stmt_affected_rows($stmt)."<br />";

// statement 해제
mysqli_stmt_close($stmt);
?>

 

5. 자동증가 값 알아내기

 

$newNo = mysqli_insert_id($db_conn);

 

mysqli_stmt_execute($stmt) 가 성공하면 바로 호출하면 됩니다.

 


6. 트랜잭션 사용하기

 

PHP 5 이상 이고, MySQL은  InnoDB 엔진을 사용해야 합니다.

 

- 자동 커밋을 끄면 트랜잭션의 시작이 됩니다.

mysqli_autocommit($db_conn, FALSE);


- 성공하면 다음을 호출하여 커밋합니다.
mysqli_commit($db_conn);

 

- 실패하면 다음을 호출하여 롤백 합니다.
mysqli_rollback($db_connd);

 



출처: https://offbyone.tistory.com/2?category=283342 [쉬고 싶은 개발자]

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
129 [Redis] php 세션 저장소를 redis 로 바꾸어 본 후기. file 졸리운_곰 2021.04.11 47
128 Creating a Website Design Templating System Using PHP 졸리운_곰 2021.02.13 22
127 Build a CRUD Operation using PHP & MongoBD 졸리운_곰 2021.01.04 23
126 CRUD Operation using PHP & Mongodb file 졸리운_곰 2021.01.04 26
125 PHP and MongoDB Connection file 졸리운_곰 2021.01.04 63
124 PHP 기반의 Micro Frameworks 정리 졸리운_곰 2020.12.02 51
123 CKEditor 4 설치와 PHP 연동 하기 file 졸리운_곰 2020.11.22 47
122 [php] CKeditor 설정 및 적용 졸리운_곰 2020.11.22 38
121 [PHP]Fuelframework 설치 및 시작 방법(window10,xampp) file 졸리운_곰 2020.10.01 34
120 Building a Simple Blog App with MongoDB and PHP file 졸리운_곰 2020.09.13 50
119 웹 설문조사 시스템 & 설문조사를 잘 하는 방법 file 졸리운_곰 2020.09.10 185
118 ReactPHP Series 졸리운_곰 2020.07.01 50
117 Building a RESTful API Using ReactPHP and MySQL file 졸리운_곰 2020.07.01 44
» [PHP 웹개발] MySQL 데이터베이스에서 mysqli(MySQL Improved) 사용법 졸리운_곰 2020.05.07 39
115 PHP 파일 업로드와 다운로드 만들기 file 졸리운_곰 2020.05.07 374
114 HOW TO INTEGRATE R WITH PHP : php와 R 언어의 연동 file 졸리운_곰 2020.05.05 252
113 XAMPP, PhpStorm, Hello World 출력하기 졸리운_곰 2020.03.27 40
112 Pico is a stupidly simple, blazing fast, flat file CMS. file 졸리운_곰 2020.03.19 30
111 directorylister php 사용법 file 졸리운_곰 2020.03.18 129
110 flat file 플랫파일시스템 : GRAV CMS file 졸리운_곰 2020.03.18 60
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED