PHP MYSQL 데이터베이스 연결 및 조회

PHP를 처음 접했을 당시의 기억이 떠올라서 기록 및 초보 개발자를 위한 기록..

웹 개발뿐만이 아니라 프로그램을 개발하게 되면 데이터베이스는 항상, 반 필수적으로 사용하게 된다.

db_test.php

<?php
$host = "DB 접속 URL";
$user = "DB 접속계정 ID";
$pass = "DB 접속 PW";
$dbName = "DB 이름";

$con = mysqli_connect($host, $user, $pass);

//데이터베이스 설치 및 클라이언트 접속 캐릭터셋 설정
mysqli_query($con, "set session character_set_connection=utf8;");
mysqli_query($con, "set session character_set_results=utf8;");
mysqli_query($con, "set session character_set_client=utf8;");
mysqli_query($con, "set names utf8");

//데이터베이스 접속정보 확인
if(!$con){
	echo "Database Connection Error!!";
}else{
	echo "Database Connection Success!!";
}

echo "<br>";

$selectdb = mysqli_select_db($con, $dbName);

//데이터베이스 선택 확인
if(!$selectdb){
	echo "Database Select DB Error!!";
}else{
	echo "Database Select DB Success!!";
}

접속정보(URL, 사용자ID, 사용자PW, DB명)가 일치하다면

아래와 같은 메시지를 확인 할 수 있을 것이지만…

DB 연걸 성공 -> 선택한 데이터베이스 까지..

만약 위 정보중 하나라도 잘못된 것이 있다면

(접속 URL 이든 사용자 이름 또는 패스워드 등..)

위와 같은 에러메시지를 확인 할 수 있다.

※ 추가사항

이런 시스템 메시지의 경우 일반 사용자가 볼 필요도 없을 뿐더러, 보안상 좋지 않다는 권고를 여기저기서 워낙 자주 봤다…

PHP 의 경우 메소드(함수) 앞에 @ 를 붙임으로써 이러한 시스템 메시지를 생략 할 수 있다.

하지만 위 예제처럼 얼마 되지 않는 메소드의 경우 @ 를 하나하나 붙일 수 있지만,

사용한 메소드가 많다면 일일히 @를 붙일 수는 없다.

이 때에는

error_reporting(0);

위와 같은 방식으로 처리하게 되면… 개발자가 원하는 오류 메시지만 출력이 가능하다.

모든 오류 메시지를 보고 싶다면..

error_reporting(E_ALL);

잡다한 시스템 메시지는 없는 깔끔한 오류!! 상태..

개발할 때에는 오류 메시지를 보고 잘못 된 부분을 수정하며 개발해 나아가야겠지만,

서비스 중인 시스템이라면 시스템 메시지는 숨김처리하는 것이 좋다.

다시 본 글의 요점으로 돌아와서…

데이터베이스 연결이 잘 되지 않는 다면… 접속 정보를 다시 한번 확인해보자.

최종적으로 연결이 성공 된 이 후라면…

간단(?)하다..

쿼리를 작성한다.

$sql = "SELECT NOW() AS NOW";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_assoc($result);
echo "<br>";
echo $row["NOW"];
echo "<br>";
print_r($row);

$sql 쿼리를 작성

mysqli_query 메소드를 이용하여

연결정보($con)와 쿼리($sql)를 전달

결과값을 $result에 저장한 후

mysqli_fetch_assoc 메소드에 결과값을 전달

하여 각 컬럼명으로 $row[“NOW”] 에서 컬럼명은 NOW (쿼리상 alias 처리)

출력 결과는 위와 같다.

mysqli_fetch_assoc 했을 때 결과 값을 확인하기 위하여

print_r 메소드를 사용하여 확인…

어라? 로우가 하나인 경우에는 위 처럼 사용하면 끝이지만..

일반적인 게시판 처럼 결과 ROW 가 2개 이상이라면…?

while 문과 mysqli_fetch_assoc 를 응용하면 가능하다.

$sql2 = "SELECT NO FROM TEST_TABLE";
$result = mysqli_query($con, $sql2);
while($row = mysqli_fetch_assoc($result)){
	echo "NO : ".$row["NO"]."<br>";
}

위와 같이 while 문 안에 작성하게 되면 한 ROW 씩 읽어 들여오게 된다.

여러 ROW 에도 문제 없다.

그리고 마지막으로 아래 명령어를 추가한다.

mysqli_close($con);

처음 데이터베이스와 연결될 때 사용한 mysqli_connect 의 반환값을 가지고 있던 $con을 해제(?) 처리 하여준다.

지금은 PHP 내에서 JAVA의 garbage collect 마냥… 일정 시간 사용되지 않으면 반환처리 된다는 글을 보았고,

정말 많은 인원(짐작 불가..)이 동시 다발적으로 사용하여 connection 이 메모리에 넘쳐 흐르는 경우를 제외한다면..

큰 문제는 없을 것 같으나…

혹시나~ 라는게 있으므로…

필자는 데이터베이스 사용이 끝난 경우 connection 을 해제한다.

0 글이 마음에 드셨다면 하트 꾸욱~