|
|
|
|
|
PHP를 이용한 MYSQL 연동 |
PHP를 사용해서 MYSQL 서버같은 RDBM에 접속하려면 아래 단계를 거쳐야 한다.
|
서버에 연결한다. => 데이터베이스 작업을 한다. => 연결을 닫는다. |
MYSQL에 연결해서 작업하기 위해서는 필요한 함수들이 있다. 지금부터 그 함수들의 기능을 알아보고 실제 어떻게 접속할 수 있는지 짧은 코드를 작성할 것이다.
|
|
|
|
|
mysql_connect( ) |
MYSQL 서버에 접속하려면 mysql_connect( ) 함수를 이용해야 한다. 함수의 인자로는 호스트이름, 데이터베이스 사용자 이름, 비밀번호 등 기본적으로 3개의 인자가 필요하다. 데이터베이스 서버 접속이 성공적으로 이루어지게 되면 연결 식별자(resource)를 반환하게 된다. 각각의 파일을 열 수 있듯이 mysql에도 여러 번 연결 가능하고 각 연결을 다른 용도로 사용할 수 있는데 각각의 연결을 구분할 수 있는 것이 연결 식별자이다. mysql_connect( ) 함수에서 인자를 사용하지 않으면 'localhost', '웹서버 소유자 이름', '비밀번호 없음'으로 하여 접속을 시도하게 될 것이다.
|
|
|
|
|
mysql_select_db( )
|
이 함수는 사용할 데이터베이스를 선택하게 되는데 성공하면 true, 실패하면 false를 반환하게 된다. 인자로는 사용할 데이터베이스 이름, 연결 식별자를 전달하면 된다.
|
|
|
|
|
mysql_close( ) |
MYSQL 서버와의 연결을 닫는 함수이다. 스크립트 파일이 종료가 되면 자동적으로 연결이 끊어지지만 미리 연결을 끊고 싶을 때 사용할 수 있다. 성공적으로 접속을 끊으면 true, 실패하면 false를 반환한다. 인자로는 연결 식별자를 전달하게 되며, 만약 식별자가 생략되면 마지막에 열린 연결을 사용한다.
|
|
|
|
|
PHP 함수를 이용한 데이터베이스 접속 예 |
  <?php |
    $serverName = "localhost"; |
    $userId = "myuserid"; |
    $userPassword = "123456"; |
    $dbName = "mydatabase";. |
|
    $dbconn = mysql_connect($serverName, $userId, $userPassword); |
    if($dbconn) { |
      $selectdb = mysql_select_db($dbName, $dbconn); |
      if(!$selectdb) echo "사용할 데이터베이스가 선택되지 못했습니다."; |
    }else{ |
      echo "MYSQL 서버에 접속할 수 없습니다."; |
    } |
  ?> |
|
|
변수 $serverName에는 도메인이나 IP를 사용할 수도 있다. mysql_connect( ) 함수를 이용하여 데이터베이스 서버에 접속을 하게 되고, 성공적으로 이루어지면 mysql_select_db( ) 함수를 사용하여 데이터베이스를 선택한다. 이런 절차가 성공적으로 이루어지게 되면 데이터베이스 서버에 접속해서 원하는 데이터를 select, insert, delete, update할 수 있다.
|
|
|
|
|
mysql_qeury( ) |
선택된 데이터베이스에 query를 전송하는 함수이다. 두 개의 인자를 전달하게 되는데 첫 번째 인자는 질의문, 두 번째 인자는 리소스(resource)를 인자로 넣어주는데 두 번째 인자는 생략 가능하다. 만약 생략하게 되면 mysql_connect( ) 함수로 연결한 마지막 리소스를 사용하게 된다. SELECT, SHOW, DESCRIBE, EXPLAIN 구문으로 mysql_query( )를 호출하면 성공할 경우 리소스(resource)를 반환하고 실패하면 FALSE를 반환한다. UPDATE, DELETE, DROP 등의 구문으로 mysql_query( )을 호출하여 성공하면 TRUE, 실패하면 FALSE를 반환한다.
|
|
|
|
|
mysql_num_rows( ) |
이 함수는 mysql_query( )에 의해 반환 받은 결과 세트에 몇 개의 레코드가 들어 있는지 알 수 있다. select 구문에만 적용된다. INSERT, UPDATE, DELETE 질의에 의해 적용된 행의 개수를 얻으려면 mysql_affected_rows( )를 사용하면 된다.
|
|
|
|
|
mysql_affected_rows( ) |
INSERT, UPDATE, DELETE 명령어의 영향을 받은 레코드가 몇 개인지 알고자 할 때 사용하는 함수이다. 인자는 연결 식별자를 전달하면 되고, 생략할 수도 있다. WHERE 절 없이 DELETE 쿼리를 사용하면 모든 레코드가 지워지기 때문에 0을 반환한다.
|
|
|
|
|
mysql_fetch_row( ) |
mysql_query( ) 함수에서 반환 받은 리소스를 인자로 전달하여 해당 레코드의 각 필드를 원소로 하는 배열을 반환한다. 불러올 레코드가 더 이상 없으면 FALSE를 반환한다. mysql_fetch_row( ) 함수를 반복 호출하면 이 포인터가 다음 레코드로 이동한다. 레코드가 담겨 있는 배열의 마지막 원소를 넘어가 버리면 false를 반환한다.
|
|
|
|
|
mysql_fetch_array( ) |
연관 색인 및 숫자 색인으로 된 배열로 결과 행을 반환한다. mysql_fetch_row( ) 함수와 동일하게 작동한다.
|
|
|
|
|
mysql_fetch_assoc( ) |
연관 색인으로 된 배열로 결과 행을 반환한다. mysql_fetch_row( ) 함수와 동일하게 작동한다.
|
|
|
|
|
mysql_fetch_object( ) |
속성을 가진 객체를 반환한다. mysql_fetch_row( ) 함수와 동일하게 작동한다.
|
|
|
|
|
SELECT 문법 |
한 개 혹은 그 이상의 테이블에서 선택된 레코드를 검색하여 출력하는데 사용된다.
|
  select 식 또는 필드 from 테이블이름 |
  [where 조건식] |
  [group by 필드] |
  [having 조건식] |
  [order by 필드 [asc | desc]] |
  [limit 오프셋, 행수] |
|
  <?php |
     $tablename = "mytable"; |
     $qeury = "select name, age from $tablename where name = '홍길동' and job='프 |
     로그램' order by age desc limit 10,20"; |
  ?> |
|
|
모든 키워드는 위의 select 사용법에 나온 순서대로 사용해야 한다. 예를 들어 having 절은 반드시 group by 뒤에, order by 전에 나와야만 한다. []로 묶인 부분은 필수사항이 아닌 선택사항으로 사용하면 된다. 위의 예제는 테이블 컬럼이 name, age, job으로 구성된 테이블(mytable)이다. name이 '홍길동'이고, 그리고 job이 '프로그램'인 레코드를 가져오는데 정렬방식은 'age' 기준으로 내림차순으로 정렬하고 10번째부터 총 20 레코드를 가져오라는 뜻이다.
① order by
order by 절은 결과 테이블의 레코드를 정렬한다. 기본값은 작은 값에서 큰 값으로 정렬하는(오름차순) ASC이고, 큰 값에서 작은 값으로 정렬(내림차순)할 경우는 DESC를 사용한다. 생략하면 오름차순으로 정렬된다.
② group by
그룹별로 검색할 때 사용된다. group by 절을 사용할 때는 그룹 함수를 사용해야 한다. 대표적인 그룹 함수는 COUNT( ), AVG( ), MIN( ), MAX( ), SUM( ) 등이 있다.
③ having
having 절에 조건을 부여함으로써 그룹을 제한할 수 있다. 즉 group by 절에서 조건을 사용할 때 사용한다.
④ limit
LIMIT 절은 쿼리 결과 중 원하는 부분만 가져오는데 사용된다. LIMIT 10,20의 뜻은 10번째부터 20개의 데이터를 가져오는 것이다.
⑤ where
where 절은 조건에 맞는 부분의 레코드만 가져오는 것이다. 여러 가지 조건을 줄 수 있는데 AND와 OR를 사용할 수 있다.
|
|
|
|
|
INSERT 문법 |
원하는 테이블에 데이터를 삽입할 때 사용한다. 형식은 다음과 같다.
|
  INSERT INTO table_name (column1, column2,...) |
  VALUES (value1, value2,....) |
  <? |
      $tablename = "mytable"; |
      $query = "insert into $tablename(name, age, job) values('홍길동', '30', '프로그램 |
  ')"; |
  ?> |
|
|
tbl_name은 테이블 이름이고, column1은 컬럼명, value1은 컬럼명에 삽입될 값이 된다. mytable이라는 테이블에 name이라는 필드에 '홍길동', age에 30, job에 '프로그램'이라는 데이터를 삽입하는 쿼리문이다.
|
|
|
|
|
UPDATE 문법 |
조건에 맞는 데이터를 수정할 때 사용한다. 형식은 다음과 같다.
|
  UPDATE table_name |
  SET column_name1 = new_value1, column_name2 = new_value2, ... |
  WHERE column_name1 = old_value |
  <? |
      $tablename = "mytable"; |
      $query = "update $tablename set name='이순신', age='50' where name='홍길동'"; |
  ?> |
|
|
tbl_name은 테이블 이름, column_name1은 컬럼명, new_value1은 수정될 데이터이고 where 절에 나오는 부분은 수정하기 위해 조건을 주는 방식이다. 조건이 주어지지 않으면 모든 레코드의 값들이 변경되기 때문에 항상 조심해야 한다.
|
|
|
|
|
DELETE 문법 |
조건에 맞는 데이터를 삭제할 때 사용된다. 형식은 다음과 같다.
|
  DELETE FROM table_name |
  WHERE column_name = some_value |
|
  <? |
      $tblName = "mytable" // 테이블 이름 |
      $sql = "delete from $tblName where name='홍길동'"; |
  ?> |
|
|
데이터를 삭제할 때 주의할 점은 조건절(where)이 없으면 해당 테이블의 데이터가 모두 삭제되므로 신중하게 사용해야 한다. 위의 예에서 보면 mytable이라는 테이블에서 컬럼 이름이 name이라는 필드에 '홍길동'이라는 사람을 삭제하는 쿼리문이다.
|
|
|
|
|
데이터 출력 예 |
이 예제는 데이터베이스 접속부터 데이터 출력까지 프로그램된 코드이다. 레코드 개수가 20개를 출력하는 쿼리문이기 때문에 while 문에서는 레코드 20번 반복하게 된다. 만약 레코드 개수가 20개가 되지 않으면 레코드 개수만큼 반복하게 된다. mysql_fetch_assoc() 함수를 반복 호출하면 이 포인터가 다음 레코드로 이동한다. 레코드가 담겨있는 배열을 넘어가게 되면 false를 반환한다.
|
  <?php |
    $serverName = "localhost"; |
    $userId = "myuserid"; |
    $userPassword = "123456"; |
    $dbName = "mydatabase"; |
|
    $dbconn = mysql_connect($serverName, $userId, $userPassword); |
    if($dbconn) { |
      $selectdb = mysql_select_db($dbName, $dbconn); |
      if(!$selectdb) echo "사용할 데이터베이스가 선택되지 못했습니다."; |
    }else{ |
      echo "MYSQL 서버에 접속할 수 없습니다."; |
    } |
    $tablename = "mytable"; // 테이블이름 |
    $qeury = "select name, age from $tablename where name = '홍길동' and job='프로그                 램' order by age desc limit 10,20"; |
|
    $resource = mysql_query($query); |
    while($rows = mysql_fetch_assoc($resource)){ |
      echo "name = " . $rows['name'] . " age = " . $rows['age'] . '< br>'; |
    } |
  ?> |
|
|
|
|
|
|