반응형

본격적인 Web 응용 프로그램을 만들려고 했을 때, 피할 수 없는 것이 "데이터베이스"이다. PHP는 데이터베이스를 이용하기 위한 몇 가지 기능이 포함되어 있다. 그 중에서 "PDO(PHP Data Objects)"라는 것을 사용하여 MySQL 데이터베이스에 엑세스하는 방법에 대해 알아보자.



데이터베이스에 액세스하는 'PDO'이란?

Web 응용 프로그램에서는 다양한 데이터를 처리한다. 그래서 주로 데이터베이스를 이용하여 데이터를 관리하는 경우가 많다. 데이터베이스는 다양한 종류가 있지만 가장 일반적으로 널리 사용되고 있는 것은 "관계형 데이터베이스"이다.

이 관계형 데이터베이스에 조회하기 위한 전용 언어인 SQL을 사용하여 데이터베이스에 필요한 정보 등을 조사하고 보내달라고 한다는 것이다. 현재 널리 사용되고 있는 MySQL이나 Oracle, PostgreSQL, 또 최근에는 Android 나 iPhone과 같은 내부 데이터베이스로서도 활약하는 SQLite 등은 모두 이 관계형 데이터베이스의 종류이다. 이외에도 데이터베이스도 물론 많이 있지만, 아무튼 지금의 단계에서 "데이터베이스 = 관계형 데이터베이스"라고 생각하는 것이 좋을 것이다.

데이터베이스 이용의 3 가지 방법

그런데, PHP에는 관계형 데이터베이스를 사용하기 위한 몇 가지 기능이 포함되어 있다. 대체로 다음 세 가지로 정리 될 것이다.

함수에 의한 이용

예를 들어 MySQL이라면, mysql_OO 같은 형태로 데이터베이스 액세스를 위한 함수가 대충 준비되어 있다. 이 함수를 호출하여 사용한다. PHP의 초기 시절부터 준비되어 있던 것으로, PHP5 이전의 것으로 사용할 수 있다. 단, 모든 함수를 호출하여 사용한다는 것은 오늘날의 객체 지향 프로그래밍과는 동떨어진 방식이라고 할 수 있다. "PHP5 이전의 오래된 PHP에서 사용했던 방식"이라고 하는 것이다.

객체에 의한 이용

예를 들어 MySQL이라면, new mysqli와 같이 하여 MySQL 액세스 개체를 만들고, 그 중의 메소드를 호출하여 사용한다. 이는 위의 함수들을 객체로 정리한 것으로, 일단 객체 지향으로 데이터베이스 액세스 할 수 있도록 한다.

PDO에 의한 이용

PDO라는 것은 "PHP Data Objects"의 약자이다. PDO라는 클래스의 개체를 만들고 그 메소드를 호출하여 데이터베이스를 사용한다. 다른 것과 크게 다른 점은 "데이터베이스라면 모두 같은 방식으로 된다"라는 점이다. 개체를 만들 때 데이터베이스의 종류 등을 설정하는 것만으로, 이후에는 데이터베이스의 종류를 신경쓰지 않고 사용할 수 있다.

 

여기에서는 "PDO를 사용한 액세스"에 대해 설명한다. 이는 PHP 5.1에서 새롭게 제공되는 기능으로 단순히 객체 지향 수단을 제공하는 것뿐만 아니라, 데이터베이스의 차이를 흡수하고 액세스 대상이 무엇이든 변하지 않는 처리가 만들 수 있도록 설계되어 있다. 이제부터 새롭게 배우고자 한다면, PDO가 가장 좋다.



MySQL에 테이블 만들기

그럼, MySQL에 샘플로 데이터베이스를 준비하기로 한다. MySQL에서 데이터베이스는 다음과 같은 구조로 되어 있다.

데이터베이스 (database)

가장 먼저 준비해야 하는 것이 데이터베이스이다. MySQL을 사용할 때는 먼저 이용하는 데이터를 정리하여 보관하는 데이터베이스를 준비한다.

테이블 (table)

데이터베이스에 작성하는 실제 데이터를 정리한다. 테이블에는 어떤 항목에 어떤 값을 저장하는 등 데이터의 구조를 정의하고 있으며, 이에 따라 데이터가 저장된다.

필드, 컬럼 (field, column )

여러가지 불려지고 있지만, 테이블에 포함되는 각각의 항목이다. 테이블은 각각의 필드를 개별적으로 저장하거나 수 없다. 테이블에 정의된 모든 항목의 값을 한곳에 보관한다.

레코드(ecord)

테이블에 실제로 저장되는 데이터이다. 하나의 레코드는 각 필드의 값이 하나씩 저장되어 있다.

데이터베이스 생성 작업은 본래라면 mysql 명령어를 실행하고 있지만 XAMPP의 경우 "phpMyAdmin"라는 MySQL 전용 관리 도구가 포함되어 있으므로 이를 이용하면 편하다.

http://localhost/phpmyadmin/

브라우저에서 이 주소에 액세스해 보자. 관리 도구의 화면이 나타난다. 여기에서 데이터베이스와 테이블을 만들어 간다.

1. 데이터베이스 작성

우선 데이터베이스를 만든다. 페이지의 상단에 줄지어 있는 탭에서 '데이터베이스'라는 탭을 클릭한다. 그리고 나타난 "새 데이터베이스 만들기"라는 표시 아래에 데이터베이스 이름과 사용하는 텍스트 인코딩 이름을 설정한다. 여기에서는 다음과 같이 입력 후에 "만들기"버튼을 누르면 데이터베이스가 만들어 진다.

  • 데이터베이스 이름 : mysampledata
  • 인코딩 : utf8_unicode_ic

2. 테이블 만들기

데이터베이스를 작성하면 왼쪽 일람 목록에 "mysampledata"라는 데이터베이스명이 추가된다. 이 항목을 클릭하여 선택하면 화면이 바뀐다. "데이터베이스 mysampledata에 새로운 table 만들기"라는 표시가 나타난다. 여기에 이름과 컬럼 수를 다음과 같이 설정한다.

  • 이름 : sampletable
  • 열 수 : 5

테이블의 내용을 설정

테이블 이름과 컬럼 수를 입력하고 "실행"버튼을 누르면 테이블의 내용을 설정하는 표시가 나타난다. 여기에서 테이블에 준비하는 각 컬럼 (값을 저장하는 항목)의 세부 사항을 설정하고 있다. 여기에서는 다음과 같이 만들어 보자. 또한, 특히 기재하지 않은 설정은 기본 상태로 둔다.

컬럼유형인덱스길이Auto incrementalNULL
idINTPRIMARYON
nameVARCHAR20
mailVARCHAR50
telVARCHAR20
memoVARCHAR255ON

이렇게 만들면 "sampletable"라는 테이블이 데이터베이스에 추가된다. 그리고 이 sampletable는 누구에게나 개방되어 있는 상태이다.

이에 대한 CREATE 문은 아래와 같다.

CREATE TABLE sampletable
(
    id int NOT NULL AUTO_INCREMENT,
    name varchar(20) NOT NULL,
    mail varchar(50) NOT NULL,
    tel varchar(20) NOT NULL,
    memo varchar(255),
    PRIMARY KEY (id)
);

3. 샘플 레코드 추가

샘플로 몇개 데이터 (레코드)를 추가하여 둔다. 위에 표시되는 탭에서 "삽입"을 선택한다. 아래에 각 컬럼 값을 입력하는 폼이 나타나므로 여기에 적당히 값을 쓰고 "실행"버튼으로 실행한다. 이것으로 작성한 내용이 새 레코드로 등록된다. 이렇게 레코드를 더 생성 해보자.

여기서 레코드를 추가 할 때는 첫 번째 id에 값을 쓸 필요는 없다. 이는 자동 증가하는 기능을 통해 자동으로 값이 추가되도록 설정(Auto incremental)되어 있다. 또한 memo는 쓰지 않아도 오류가 발생하지 않는다.

이에 대한 INSERT 문은 아래와 같다.

INSERT INTO sampletable(name, mail, tel) VALUES ("성진", "sung@abc.com", "02-123-1234");
INSERT INTO sampletable(name, mail, tel, memo) VALUES ("원석", "won@foo.info", "02-111-1111", "메모");


PDO 개체를 만들기

드라이버 로드

그러면 실제로 PDO를 이용하여 MySQL에 접근 해보기로 하자. PDO를 이용하려면 PHP로 PDO 이용을 위한 드라이버 프로그램이 로드되어 있지 않으면 안된다. 드라이버 로드는 php.ini 파일에 작성되어 있다. (XAMPP의 경우 XAMPP 설치 폴더에있는 "php"폴더에 있다)

extention=php_pdo.dll
extention=php_pdo_XX.dll

php.ini에서 이 같은 내용이 있을 것이므로 검색해 보자. XX 부분은 데이터베이스 유형이 지정된다. MySQL의 경우 "php_pdo_mysql_mysqlnd.dll", "php_pdo_mysql_libmysql.dll" 두 개의 DLL 파일을 로드하는 내용이 있을 것이다. 이 글의 시작 부분에 주석을 나타내는 콜론 (;) 기호가 붙어 있으면, 그것을 제거한다. 이제 서버를 재시작하면 드라이버를 로드 할 수 있다.

덧붙여서 현재 XAMPP 1.7.x에서는 기본적으로 MySQL의 드라이버가 로드되도록 설정되어 있기 때문에, php.ini의 수정하지 않아도 된다.

PDO 액세스의 기본 정리

그럼 PDO를 이용한 데이터베이스 액세스에 대해 정리하고 갑시다. 먼저 해야 할 것은 'PDO'개체를 만드는 것이다.

$변수 = new PDO(서버 지정, 사용자 이름, 암호);

이런 식으로 만든다. 첫번째 인수에 데이터베이스를 지정하는 텍스트를 지정하고, 두번째, 세번째 인수에 액세스하는 사용자 이름과 암호를 지정한다. 여기서 문제는 첫번째 인수이다. 이는 다음과 같은 형태로 작성한다.

"데이터베이스 종류:host=호스트;dbname=데이터베이스;charset=인코딩"

MySQL의 경우, 데이터베이스 종류는 "mysql"로 지정한다. 이번 예제처럼 localhost에 있는 mysampledata라는 데이터베이스에 액세스하는 경우 다음과 같이 된다.

"mysql:host=localhost;dbname=mysampledata;charset=utf8"

이제 MySQL을 사용하여 특정 데이터베이스에 액세스하기 위해 PDO 오브젝트를 작성한다. 이 후에는 이 개체에서 필요한 메소드를 호출해 나갈 뿐이다.

PDO 작성에는 또 한 가지 주의해야 할 점이 있다. 그것은 "예외가 발생할 가능성이 있다"는 점이다. PDO를 사용하여 데이터베이스에 액세스할 때 문제가 발생하면 PDOException 예외가 보내진다. 그래서 new PDO 및 데이터베이스 액세스, 실제로는 다음과 같은 형태로 작성한다.

try {
    $변수 = new PDO (서버 지정, 사용자 이름, 암호);
    ... $변수의 메소드를 호출 데이터베이스에 액세스한다 ...
} catch (PDOException $e) {
    ...... 예외 발생시의 처리 ......
}

이후에는 데이터베이스에 액세스하여 무엇을 할 것인가에 따라 호출 메소드와 데이터베이스에서 들어오는 값의 처리 방법도 달라진다.



PDO으로 테이블 데이터 목록 조회하기

그러면 실제로 데이터베이스에 액세스하여 해보자. 먼저 테이블에 저장되어 있는 레코드를 조회를 해보기로 한다.

레코드의 데이터를 조회하려면 SQL 쿼리(명령문)을 직접 실행하는 메소드를 이용하는데, 이는 "query"라는 것으로, 다음과 같이 호출한다.

$변수 = $pdo->query(쿼리);

인수에 실행하는 쿼리의 텍스트를 지정해 실행하면, 실행 결과가 반환된다. 테이블의 데이터를 한꺼번에 얻으려면 쿼리는 대충 다음과 같이 한다.

select * from 테이블명

이 query 메소드의 반환 값은 "PDOStatement"라는 클래스의 인스턴스이다. 이것은 "fetch"라는 메소드를 호출하여 얻어온 레코드를 차례로 꺼내 올 수 있다. 따라서 반복을 통해 필요한 만큼 레코드를 꺼내 처리한다.

while ($변수 = $pdostatement->fetch(꺼내오는 방법의 지정)) {
    ...... 꺼내온 레코드 처리하기 ......
}

fetch의 인수는 값을 꺼내기 위해서 값을 제공한다. 일반적으로 PDO::FETCH_ASSOC을 지정한다. 이것은 각각의 컬럼 명을 키에 설정한 연관 배열의 형태로 값을 추출한다. 이 후는 꺼낸 연관 배열에서 필요한 값을 추출 처리하면 된다.

그럼 이전 sampletable 테이블에서 레코드를 꺼내 나열하는 예제를 만들어 보겠다.

<?php
$result = "";
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query("select * from sampletable");
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . $column . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

여기에서 "index.php"라는 파일로 작성한다. 여기에서는 $pdo->query에서 select * from sampletable을 실행하여 얻은 결과를 fetch에서 꺼내 테이블에 정리하고 있다.

또한 마지막으로 $pdo = null;라는 문장이 있는데, 이는 생성된 PDO 개체를 개방하기 위한 처리이다. PDO 개체를 대입한 변수에 명시적으로 null로 설정하여 데이터베이스와의 연결이 끊어 자원이 개방된다. 또는 아래와 같이 unset 함수로 변수를 개방하여도 같은 기능이 된다.

unset($pdo);



PDO으로 테이블 데이터 추가하기

여기서는 레코드 추가에 대해서 설명하겠다. 레코드의 추가도 조회와 동일하게 SQL 쿼리를 실행하여 수행한다. 이 레코드 조회를 하는 경우와는 조금 차이가 있기 때문에 주의가 필요하다.

레코드 조회 쿼리를 실행하면 데이터베이스에서 레코드의 데이터가 반환된다. 이 레코드의 추가는 단순히 명령을 쓰기만 하기 때문에, 결과 데이터를 받을 필요가 없다. 이러한 쿼리의 실행은 query 대신 "exec"라는 메소드를 이용한다.

$변수 = $pdo->exec(쿼리);

반환 값은 업데이트된 레코드 수를 나타내는 int 값이다. exec는 데이터의 추가 이외에도 여러가지 처리도 할 수도 있기 때문에, "얼마나 많은 레코드가 업데이트 되었는지"를 알게 된다. 아무것도 변하지 않으면 반환 값은 0이 된다.

레코드를 추가할 경우 인수는 다음과 같은 쿼리가 설정된다.

"insert into 테이블 (컬럼명1, 컬럼명2, ...) values (값1, 값2, ...) "

insert 문 작성은 다른 밥법도 있지만 이것이 가장 이해하기 쉬울 것이다. "insert into 테이블"다음에 ()에 값을 설정하는 컬럼명을 쉼표로 구분하여 작성한 다음에 "values"를 붙이고, 또 다른 ()에 값을 쉼표로 구분하여 작성한다. 이 때, 칼럼명의 ()와 값의 ()에 작성하는 내용은 순서가 맞아야 한다.

그럼 앞의 예제를 수정해서 레코드의 추가 기능을 구현하자.

index.php

<?php
<?php
$result = "";
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query("select * from sampletable");
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . htmlspecialchars($column) . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <form method="post" action="./add.php">
            <tr><td>NAME:</td><td><input type="text" name="name"></td></tr>
            <tr><td>MAIL:</td><td><input type="text" name="mail"></td></tr>
            <tr><td>TEL:</td><td><input type="text" name="tel"></td></tr>
            <tr><td>MEMO:</td><td><textarea name="memo"></textarea></td></tr>
            <tr><td></td><td><input type="submit" value="추가"></td></tr>
        </form>
        </table>
        <hr>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

add.php

<?php
$name = $_POST['name'];
$mail = $_POST['mail'];
$tel = $_POST['tel'];
$memo = $_POST['memo'];
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $query = "insert into sampletable (name, mail, tel, memo) values ('$name', '$mail', '$tel', '$memo')";
    $pdo->exec($query);
} catch(PDOException $e){
    echo "<html><body><h1>ERR:" . $e->getMessage() + "</h1></body></html>";
}
$pdo = null;
header('Location: index.php');

여기에서는 index.php 외에 새롭게 "add.php"라는 파일을 추가되었다. index.php에 액세스하고 표시된 양식에 "이름, 이메일 주소, 전화 번호, 메모"를 써서 보내면 레코드가 새로 추가된다.

add.php는 먼저 폼에서 전송된 값을 각각 변수에 꺼낸다.

$name = $_POST['name'];
$mail = $_POST['mail'];
$tel = $_POST['tel'];
$memo = $_POST['memo'];

이러한 값을 함께 쿼리 문을 작성하고 exec한다. 쿼리 문은 위의 값을 정리하고 다음과 같이 작성한다.

$query = "insert into sampletable (name, mail, tel, memo)  values ('$name', '$mail', '$tel', '$memo')";

id 값은 필요하지 않기 때문에 4개의 컬럼의 값만 넣는다. 이를 exec하면 레코드가 추가된다. 이 후에는 index.php로 리다이렉트하여 목록이 표시되면, 추가된 레코드가 나타날 것이다.



PDO으로 테이블 데이터 검색하기

추가하여 목록 표시를 할 수 있게 되었으니, 다음은 "검색"을 해 보자. 검색은 처음에 했던 "레코드 목록 조회"와 유사하다. "seleft * from 테이블"로 조회를 한다. 그러나 이대로는 모든 레코드를 조회되기 때문에 조건을 설정해야 한다.

"select * from 테이블 where 조건"

테이블 이름 뒤에 "where"를 붙여서 그 다음에 조건을 지정한다. 조건은 "컬럼 = 값"과 같이 지정된 컬럼의 값을 지정한다. 등호 및 부등호를 사용하여 지정하는 것이 일반적이다. 예를 들어, sampletable에서 name이 "성진"인 데이터를 검색하고 싶다면,

select * from sampletable where name = '성진'

이런 식으로하면 된다. 그럼 앞의 index.php를 수정하여 이름을 검색하고 표시해보도록 하자. 아래와 같이 예제를 수정한다.

<?php
$result = "";
$query = "select * from sampletable";
if (isset($_POST['name'])){
    $fstr = $_POST['name'];
    if ($fstr != ''){
        $query .= " where name = '$fstr'";
    }
}
try {
    $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
    $statement = $pdo->query($query);
    while($record = $statement->fetch(PDO::FETCH_ASSOC)){
        $result .= "<tr>";
        foreach($record as $column){
            $result .= "<td>" . $column . "</td>";
        }
        $result .= "</tr>";
    }
} catch(PDOException $e){
    $result = "#ERR:" . $e->getMessage();
}
$pdo = null;
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
        <style>
        h1 { font-size:14pt;
            padding:5px;
            background-color:#AAFFFF; }
        table tr td {
            padding:5px;
            background-color:#DDFFCC; }
        </style>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <table>
        <form method="post" action="./index.php">
            <tr><td>검색 문장:</td><td><input type="text" name="name"></td></tr>
            <tr><td></td><td><input type="submit" value="송신"></td></tr>
        </form>
        </table>
        <hr>
        <table>
        <?php echo $result; ?>
        </table>
    </body>
</html>

이번에는 입력 필드가 1개인 양식이 표시된다. 여기에 검색할 이름을 쓰고 실행하면 그 이름의 레코드 만 표시된다.

이번에는 먼저 $query ="select * from sampletable";와 같이 쿼리를 작성했다. 이는 모든 레코드를 검색한다. 이어서 if (isset($_POST['name'])) 이렇게 하여 $_POST['name']의 존재하는지 여부를 확인한다. 값이 있다면 $query .= " where name = '$fstr'"";과 같이 where 절을 쿼리에 추가하여 조건문이 쿼리에 포함된다. 이것으로 name은 $fstr인 경우만 찾게 된다.

이때, 단어를 정확하게 알지 못하면 검색을 하지 못하기에 일반적으로는 입력한 일부 단어로 검색하는 "퍼지(fuzzy) 검색" 하는 경우가 많다. 그런 경우는 "like"라는 비교 연산자를 사용한다. 이를 이용하여 검색 텍스트에 와일드 카드(*)를 사용할 수 있다.

where name like '원*'

예를 들어, where 절을 이렇게하면 name의 값이 "원"으로 시작하는 모든 데이터가 검색된다. "원석"도 "원식"도 "원"으로로 시작하는 것은 모두 찾을 수 있다.


PDO으로 테이블 데이터 삭제, 수정

이 밖에 필요한 작업은 레코드 삭제, 그리고 기존에 있는 레코드의 내용을 갱신하는 작업이 있다. 이에 대해서도 정리해 설명하겠다.

레코드 삭제

delete from 테이블 where 조건

삭제는 delete from 테이블이라는 형태로 실행한다. 그러나 이것만 있으면 지정한 테이블의 레코드를 모두 삭제해 버리므로 "어떤 레코드를 삭제하는 것인가"라는 정보를 추가해 줄 필요가 있다. 그러기 위해서 필요한 구문이 검색에 사용한 "where"이다.

where 조건을 설정하면 조건에 맞는 레코드를 검색하여 이를 삭제한다. 조건 설정을 변경하면 예기치 않게 레코드를 삭제해 버리는 일이 생길 수 있기에 주의가 필요하다.

실제 사용 예로서 아래에 "이름을 지정하여 레코드를 삭제"하는 코드를 작성해 보도록 하자.

index.php의 송신 폼

        <table>
        <form method="post" action="./remove.php">
            <tr><td>검색 단어:</td><td><input type="text" name="name"></td></tr>
            <tr><td></td><td><input type="submit" value="송신"></td></tr>
        </form>
        </table>

remove.php

<?php
$name = htmlspecialchars($_POST['name']);
try {
   $pdo = new PDO("mysql:host=localhost:3306;dbname=mysampledata;charset=utf8", "root","1234");
   $query = "delete from sampletable where name = '$name'";
   $pdo->exec($query);
   //echo $query;
} catch(PDOException $e){
   echo "<html><body><h1>ERR:" . $e->getMessage() + "</h1></body></html>";
}
$pdo = null;
header('Location: index.php');

index.php 양식을 준비하여 두고, 여기에 삭제할 레코드의 이름을 입력하면 해당 이름의 레코드를 삭제한다.

레코드 수정

update 테이블 set 컬럼 = 값 where 조건

레코드 수정은 "update 테이블" 이라는 것을 사용한다. 수정 내용은 "set" 후에 컬럼명과 설정 값을 "컬럼 = 값"과 같이 등호로 작성한다. 여러 컬럼을 변경하려면 그들을 쉼표로 구분하여 계속 작성한다. 예를 들면set name = 'foo', mail = 'foo@ foo'이런 식이다.

그리고, 이 update도 "어떤 레코드의 내용을 업데이트할 것인가"를 where 조건을 사용하여 지정한다. 그러면 검색된 레코드의 컬럼가 set 한 내용으로 수정된다. 여러 레코드가 조회되면 그 컬럼이 모두 지정된 값으로 수정해 버리기 때문에, 잘해서 검색 조건을 틀리지 않도록 해야한다.

 

이제 레코드 만들기, 검색, 수정, 삭제 등 기본적인 작업을 할 수있게 되었다. 대충 다시 읽어 보면 알 수 있듯이, 조작의 대부분은 "PHP"보다는 "SQL 쿼리"로 동작하고 있다는 것을 알 수 있다. PDO으로 동작하고 있는 것은 단지 "SQL 쿼리를 실행하는"것에 지나지 않는다.

본격적으로 데이터베이스를 이용해 싶은 사람은 PDO에 대해서는 물론, "SQL의 사용법"에 대해서도 제대로 공부해야 한다. SQL을 잘 다룰 수있게 되면, PDO 이용의 기본은 거의 마스터했다고 해도 과언이 아니다.

반응형
  1. 123 2018.05.20 18:55

    감동 그자체...

+ Recent posts