데이터를 수정하는 UPDATE 쿼리는 테이블 컬럼의 전체를 수정하게 됩니다. 전체의 수 정을 할 필요성도 있겠지만 이런 작업들은 많지 않습니다. 즉, 전체를 수정한다는 것은 다 른 데이터들을 잃게 되는 손실이 발생할 수 있습니다. 수정된 작업은 다시 되돌릴 수 없습니다.

일반적으로 UPDATE 문법은 조건 WHERE문과 함께 사용합니다. 특정 데이터를 조건으 로 찾아서 데이터를 변경합니다.

| 쿼리 문법 |

UPDATE 테이블명 SET 컬럼명=value, 컬럼명=value,... WHERE 조건 컬럼명=조건  

17.2.1 쿼리 실습

테이블의 데이터를 수정할 때는 선택적으로 데이터 열을 지정해야 합니다. 데이터의 열을 지정할 때 많이 이용하는 것이 테이블의 프라이머리 키입니다. 프라이머리 키는 테이블의 각각의 데이터로 중복되지 않은 고유의 키입니다.

| 예제 쿼리 |

update members set City='busan' where Id=4; 

위의 쿼리처럼 Id 프라이머리 키를 이용하면 무난하게 데이터 1개의 열을 지정할 수 있습니다.

| 콘솔 실습 화면 |

mysql> update members set City='busan' where Id=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

UPDATE를 통하여 하나하나 데이터를 변경할 때는 Primary Key 값인 Id 를 사용하면 좋습니다. 만일, 다수의 데이터를 변경할 때는 다른 조건 값을 같이 사용하면 편리합니다.

| 콘솔 실습 화면 |

mysql> select * from members;
+----+----------+-----------+-------------+-------+---------+
| Id | LastName | FirstName | Address     | City  | Country |
+----+----------+-----------+-------------+-------+---------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   |
|  3 | james    | kim       | youngdun-po | seoul | korea   |
|  4 | eric     | jung      | seocho-gu   | busan | korea   |
+----+----------+-----------+-------------+-------+---------+
4 rows in set (0.00 sec)

위의 예제는 Id=4인 회원의 도시를 변경하는 것입니다.

17.2.2 PHP 실습

PHP 코드를 통하여 데이터를 변경하는 실습을 해 봅니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// array 배열기반 update 쿼리를 생성합니다.
public function arrQueryUpdate($tbname, $arr)
{
            $queryString = "UPDATE $tbname SET ";

            $arrKey = array_keys($arr);
            for ($i=0;$i<count($arr);$i++) {
                // $key = $arr[$i];
                echo $arrKey[$i]."<br>";
                $key = $arrKey[$i];
                $queryString .= "`".$key."`='".$arr[$key]."',";
            }

            $queryString .= ";";
            $queryString = str_replace(",;"," ",$queryString);
            return $queryString;               
}

public function updateID($tbname,$arr,$Id)
{
            if ($tbname) {
                $queryString = $this->arrQueryUpdate($tbname, $arr);
                $queryString .= "where Id='$Id'";

                // 쿼리를 전송합니다.
                if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
                    $this->msgEcho("쿼리성공] ".$queryString);
                    $this->msgEcho(" 데이터 $Id 업데이트!");

                    // 객체 반환, 매서드체인
                    return $this; 

                } else {
                    $this->msgEcho("Error] ".$queryString);
                }


            } else {
                $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }

}

예제 파일 | update-02.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	$tbname = "members";
	$arr = array('FirstName' => 'hojin', 'LastName' => 'lee');
	$db->updateID($tbname, $arr, 2);

?>

화면 출력

mysql connected!
FirstName
LastName
쿼리성공] UPDATE members SET `FirstName`='hojin',`LastName`='lee' where Id='2'
데이터 2 업데이트!

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 조건 업데이트
public function updateWhere($tbname,$arr,$where){
            if ($tbname) {
                $queryString = $this->arrQueryUpdate($tbname, $arr);
                $queryString .= "where $where";

                // 쿼리를 전송합니다.
                if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
                    $this->msgEcho("쿼리성공] ".$queryString);
                    $this->msgEcho(" 데이터 업데이트!");

                    // 객체 반환, 매서드체인
                    return $this; 

                } else {
                    $this->msgEcho("Error] ".$queryString);
                }

            } else {
                $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }

}
 

예제 파일 | update-03.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	$tbname = "members";
	$arr = array('Country' => 'Korea');
	$db->updateWhere($tbname, $arr, "Id>='2'");

?>

화면 출력

mysql connected!
Country
쿼리성공] UPDATE members SET `Country`='Korea' where Id>='2'
데이터 업데이트!