요기보드3   필수기초 선택과목 요기보드 그누보드 로그인

P H P


mysqli_query() , mysqli_fetch_array( ) , mysqli_num_rows( )

▶ mysqli_query( )
MySQL에게 명령을 전달하는 함수야. 사용방법은 다음과 같아.

mysqli_query(DB접속객체, MySQL쿼리문)

예를 들어 yg_bbs에 앞에서 배운 SQL문을 이용해서 자료를 하나 추가하려면 보통 다음과 같은 형식으로 사용해.


$dbc = mysqli_connect('localhost','abcd','1234','abcd') or die('DB접속 에러!');
$query = "INSERT INTO yg_bbs (datetime, subject) VALUES ('2021-10-18','php에서입력')" ;
mysqli_query($dbc,$query) or die('자료입력 에러');

위 셋째 줄 mysqli_query( ) 안에 둘째 줄의 쿼리문을 직접 넣어도 되지만 복잡해 보이기 때문에 쿼리문을 일단 별도의 $query라는 변수에 넣어 두고 mysqli_query($dbc, $query) 형식을 사용하는 게 일반적이야.
이와 같이 MySQL에 쿼리 명령을 전달하는 함수가 mysqli_query() 함수야.
위 내용을 그대로 php 파일에 입력하고 실행해서 화면에 아무런 결과도 없다면 저장이 된 거야. 저장이 되지 않았다면 die(‘자료입력 에러’)에 걸려서 메시지가 출력되겠지?
앞서 배운 관리프로그램인 phpMyAdmin으로 확인해 보면 틀림없이 새 자료가 추가된 것을 확인할 수 있을 거야.

▶ mysqli_fetch_array( )
자료를 추가하는 INSERT문뿐만 아니라 수정하는 UPDATE, 삭제의 DELETE 쿼리문은 앞에서 배운 mysqli_query()만 사용하면 돼.
그런데 DB에 저장된 자료를 가져와서 화면에 보여줄 때는 조금 더 복잡해져.
왜냐하면, 결과가 성공 또는 실패라는 결론만 있는 것이 아니거든.
가져올 내용이 1줄이 될 수도 있고 수천 줄이 될 수도 있어. 일단 예제 코드를 볼까?
여기서 갑자기 어려워지는데 걱정할 필요 없어.
일단 그냥 이런 함수도 있구나… 하는 정도로만 봐도 돼.


<?php
    $dbc = mysqli_connect('localhost','abcd','1234','abcd') 
           or die('DB접속 에러!') ;
    $query = "SELECT bno, datetime, subject FROM yg_bbs ";
    $result = mysqli_query($dbc,$query) or die('쿼리 에러!') ;
    while ($row = mysqli_fetch_array($result)) {
        echo $row['bno'];
        echo $row['datetime'];
        echo $row['subject'];
    }
?>

여기서는 자료추가 때와 다르게 mysqli_query()의 결과를 $result라는 객체에 저장했어.
이 $result라는 객체에는 쿼리문의 결과로 yg_bbs 테이블에 저장되어 있는 모든 자료의 글 번호, 날짜 시간, 제목이 배열형태로 저장되고 한 줄마다 다시 또 배열형태로 저장돼.

앞서 배열(Array)에 대해 잠깐 배웠지?
이름은 한 개이지만 서랍마다 다른 값을 저장할 수 있는 변수 말이야.
여기서는 각각의 서랍 안에는 다시 번호(bno), 날짜(datetime), 제목(subject)이라는 칸으로 나뉜다고 생각하면 될거야.
이 배열에 저장되어 있는 내용을 한 줄 꺼내는 명령이 바로 mysqli_fetch_array()이야. (서랍 하나를 여는 명령으로 생각해 봐.)
그리고 배열 전체를 돌기 위해 while 반복문과 같이 사용했어. 즉, while 한 바퀴 돌 때마다 1번 서랍, 2번 서랍, 3번 서랍..을 열어서 $row라는 배열 변수에서 bno, datetime, subject 값을 하나씩 꺼내서 echo 명령으로 화면에 뿌려 주는 거야.
그리고 마지막 서랍까지 가져오고 나면 이 while 반복문은 끝나게 돼.
이 반복문 안에서는 $row[칼럼명]의 형태로 저장된 값을 가져와서 echo로 화면에 뿌려주고 있어.(각 서랍 안의 번호 칸, 날짜 칸, 제목 칸의 내용을 가져오는 거야.)

위 예제를 그대로 입력해서 브라우저에서 실행해 보면 정말로 그동안 게시판 테이블에 입력했던 모든 내용 중 번호, 날짜, 제목이 화면에 모두 나오는 것을 확인할 수 있어.
그런데 다 다닥다닥 붙어서 출력되어 보기가 예쁘지는 않을 거야.
이것을 예쁘게 꾸미는 것은 바로 html의 역할이야.
다음 학습인 ‘요기보드’를 공부하면 이 결과를 html의 테이블 안에 하나씩 차곡차곡 넣는 예제를 보게 될 거야.
일단 여기에서는 간단히 수정해서 while문 안의 내용을 아래와 같이 수정하면 칼럼 별로 한 칸씩 떼고, 레코드별로 1줄씩 표시가 되겠지?


while ($row = mysqli_fetch_array($result)) {
    echo $row['bno'] . ' ' ;
    echo $row['datetime'] . ' ' ;
    echo $row['subject'] ;
    echo '<br>' ;
}

▶ mysqli_num_rows( )
mysqli_query()의 결과가 몇 개인지 알려 주는 함수야.
즉, 이번 쿼리의 결과로 가져온 데이터의 총 개수(레코드)를 알려줘.
위 예제의 맨 마지막 줄에 아래와 같은 줄을 추가해 주고 실행해 봐.


echo mysqli_num_rows($result) ;

맨 아래 줄에 이번 쿼리문 결과로 반환해 준 자료가 총 몇 개인지 보여 주겠지?

자, php의 명령에 대한 공부는 일단 여기까지만 할 거야. 이 정도면 입문자에게는 충분해.
또 벌써?
나머지 필요한 것은 다음 장 '요기보드' 를 학습하면서 필요할 때마다 설명할 예정이야.
내 공부방식은 일단 완성품부터 후딱 만들고 나중에 궁금한 것 하나씩 찾아가는 방식이거든.
또 이렇게 맛만 보여주는 이유는 php의 함수종류와 예제는 인터넷에서 얼마든지 찾을 수 있어. 솔직히 책에서 모든 명령을 설명한다는 것은 종이 낭비 같아.
나중에 '요기보드' 까지 배운 뒤에 php의 모든 함수를 일목요연하게 정리한 사이트를 소개해 줄게.

▶ mysqli_() 함수와 mysql_() 함수의 차이점
인터넷에서 php 함수를 검색을 하다 보면 이 책에서 설명한 mysqli_connect() 또는 mysqli_query()처럼 sql 함수이름에 mysql 다음에 ‘i’가 붙은 게 있고, mysql_connect() mysql_query() 처럼 ‘i’가 없는 함수들도 함께 섞여서 검색될 거야.
i 가 없는 명령들은 php 버전4에서 사용하던 함수이고, i가 붙은 것은 php5부터 지원하는 함수이야.
이름이 달라진 이유는 내부적으로 아주 큰 변화가 생겼기 때문인데 i가 붙은 검색결과만 보면 돼. 이 i는 improved(향상된)의 약자라고 하더라구.
mysqli 함수가 훨씬 더 빠르고 php4 는 이제 점점 안 쓰이는 추세이니 꼭 i를 붙여서 사용해.
php 는 2021년 현재 벌써 버전8 이 나왔어. 버전4는 이제 안쓰는게 좋아.


목차제 목조회
129
132
127
113
148
106
111
99
102
107
114
122
111
116