PHP에서 MySQL쿼리 사용하기

MySQL을 처음 배우면 콘솔창에서 명령어를 직접 입력하면서 배우지만 웹에 연동 할 때는 다른 웹프로그래밍 언어와 연계를 해야한다.

대부분 MySQL쿼리를 그대로 작성해서 특정 명령어를 통해 SQL쿼리문을 보내는 것으로 SQL을 사용할 수 있다.

직접 서버를 돌릴 때와 호스팅을 이용할 때 차이점

직접 서버를 돌리는 경우는 MySQL내에 ‘DB’를 여러개 만들 수 있지만 웹 호스팅을 이용하면 대부분 한 개의 DB만 생성해서 사용 가능하다.

실무에서도 대부분 1개 사이트에는 DB 1개만 사용한다.

필자는 이것을 모르고 2~3개 DB를 생성하여 집에서 서버를 돌리다 웹호스팅을 하며 이 사실을 알게되고 부랴부랴 1개의 DB로 코드를 전부 고치는 시행착오를 겪었다.

모든 php파일을 실행할 때 마다 MySQL DB를 사용할 때 DB에 접속을 해야하는데 반복해서 사용하는 과정인 만큼 별도로 php파일을 하나 생성하고 그 안에 ID, 비밀번호를 넣어두고 필요할 때 마다 include문으로 불러들여와서 사용하는 게 좋다.

아래 코드가 들어있는 파일은 db.php로 정하고 앞으로 db 접속할 일이 있을 때 마다 include문으로 불러서 사용할 것이다.

<?php
$conn = mysqli_connect("localhost","repnam","passoword");
mysqli_select_db($conn, "repnam");
?>

mysqli_connect (SQL서버주소, ID, 패스워드)

위 코드에서 “localhost”는 웹호스팅 서버 주소와 MySQL DB서버의 주소가 같을 때 “localhost”를 사용한다.

대부분의 웹호스팅은 “localhost”로 적어서 접속한다. 혹시나 SQL DB서버가 따로 있을 경우는 DB서버의 ip주소나 도메인을 입력한다.

위 코드에서 ID는 repnam이고 비밀번호는 ‘password’이다.

이런 접속정보를 $conn변수에 저장한다.

다음에 쓸 함수인 mysqli_select_db()에서 사용하기 위함이다.

mysqli_select_db($conn, DB명)

$conn은 전 문단에서 설명한 SQL서버주소, ID, 패스워드를 가지고 있는 변수이다.

이 명령어 안의 “repnam”부분은 ID가 아닌 ‘DB이름’이다.

대부분 웹호스팅에서 id나 웹사이트 이름과 같거나 비슷한 DB명칭을 사용한다.

MySQL은 반드시 DB를 지정해야 DB를 조작할 수 있다.

DB불러와서 호출하기

아래는 이미 DB에 불러올 내용이 들어있는 DB의 예제이다.

DB에 내용이 없다면 일단 채우는 것이 먼저.

<?php
include "db.php";

$sql = "SELECT * FROM products ORDER BY id DESC";
$result = mysqli_query($conn, $sql);


while($row = mysqli_fetch_assoc($result)){
echo "<p>"
echo $row['id']." / ".$row['prodname'];
echo </p>
}



?>

include “db.php”

위에서 DB접속정보를 만든 파일이 db.php이고 db접속이 필요할 때 마다 이 파일을 include해서 사용하는 구문이다.

$sql = “SELECT * FROM products ORDER BY id DESC”;

products는 테이블이름이다. 엄격하게는 ` 와 ` 사이에 테이블 이름을 넣어야 하지만 내부 명령어와 겹치지 않는 테이블 이름은 넣지 않아도 상관 없다. 난 일반적으로 넣지 않는다.

위 SQL문은 products라는 테이블에서 id순대로 오름차순 정렬을 하여 불러오라는 명령어이다. 이를 $sql변수에 저장했고 다음 단계에서 불러 올 것이다.

$result = mysqli_query($conn, $sql);

$conn은 db.php내에서 정의된 변수이다. $conn변수와 바로 앞에서 정의된 $sql변수를 파라미터로 넣어서 SQL서버로 명령어를 전송하는 함수이다.

데이터 불러오기 쿼리문을 사용하는 경우는 $result안에 불러온 db의 내용이 들어간다.

데이터 불러오기가 아닌 쓰기 쿼리문을 사용하는 경우에는 $result안에 숫자로 그 결과가 표시된다. 성공일 경우는 ‘1’이 반환되고 그 외 에러가 생기면 ‘0’이반환된다.

while($row = mysqli_fetch_assoc($result)) {}

$result변수 안에 들어있는 결과를 한 레코드씩 $row변수안에 집어 넣는다.

while 괄호 안의 mysqli_fetch_assoc()함수가 호출될 때 마다 다음 레코드가 불러와지고 더 이상 불러올 레코드가 없을 때는 $row변수에 0이 반환되고 while(0)이 되므로 while반복문은 종료된다.

echo $row[‘id’].” / “.$row[‘prodname’];

db의 각 레코드에는 일반적으로 ‘id’라는 열을 넣고 중복되지 않는 값으로 누적을 하여 사용한다.

db의 조작을 위해서는 중복되지 않는 고유한 값을 가진 열을 넣고 이 열로 각 레코드를 조작하는 것이 좋다.

이 예제에서는 그렇게 자동생성된 id와 ‘prodname’이란 열의 정보를 불러오는 부분이다.

함께 읽어볼만한 글

Leave a Comment