선생님을 위한 프로그래밍 수업

프로그래밍과 연동

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기 > MySQL

프로그래밍과 데이터베이스의 관계

  1. 프로그래밍과 데이터베이스는 무관하다.
  2. 데이터베이스는 독립적인 시스템으로 프로그래밍과 상관없이 사용될 수 있다.
  3. 데이터베이스를 이해하고 있다면 여기에 프로그래밍을 결합해서 더 많은 일을 할 수 있다.

API

  • 데이터베이스는 API를 제공한다.
  • PHP와 같은 프로그래밍 언어들은 이 API를 이용해서 데이터베이스를 이용한다.

PHP와 MYSQL

  • 가장 많이 사용되는 조합

데이터베이스의 내용을 웹으로 출력하기

STEP1. 데이터입력

CREATE DATABASE `class` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE class;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` char(4) NOT NULL,
  `address` varchar(50) NOT NULL,
  `department` enum('국문과','영문과','컴퓨터공학과','전자공학과','물리학과') NOT NULL,
  `introduction` text NOT NULL,
  `number` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_number` (`number`) USING BTREE,
  KEY `idx_department` (`department`),
  KEY `idx_department_name` (`department`,`address`),
  FULLTEXT KEY `idx_introduction` (`introduction`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
 
INSERT INTO `student` VALUES (1, '이숙경', '청주', '컴퓨터공학과', '저는 컴퓨터 공학과에 다닙니다. computer', '0212031');
INSERT INTO `student` VALUES (2, '박재숙', '서울', '영문과', '저는 영문과에 다닙니다.', '0512321');
INSERT INTO `student` VALUES (3, '백태호', '경주', '컴퓨터공학과', '저는 컴퓨터 공학과에 다니고 경주에서 왔습니다.', '0913134');
INSERT INTO `student` VALUES (4, '김경훈', '제천', '국문과', '제천이 고향이고 국문과에 다닙니다.', '9813413');
INSERT INTO `student` VALUES (6, '김경진', '제주', '국문과', '이번에 국문과에 입학한 김경진이라고 합니다. 제주에서 왔어요.', '0534543');
INSERT INTO `student` VALUES (7, '박경호', '제주', '국문과', '박경호입니다. 잘 부탁드립니다.', '0134511');
INSERT INTO `student` VALUES (8, '김정인', '대전', '영문과', '김정인입니다. 대전에서 왔고, 영문과에 다닙니다.', '0034543');

STEP2. 웹페이지 만들기

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    <style>
        table{border:1px solid gray; border-collapse:collapse;}
        td{border:1px solid gray;padding:5px;}
    </style>
</head>
<body>
<?php

$conn = mysql_connect("localhost", "root", "1234");
mysql_query('SET NAMES utf8');
if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("class")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

$sql = "SELECT * 
        FROM  student
    LIMIT 10";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
echo "<table>";
while ($row = mysql_fetch_assoc($result)) {
    echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['department']}</td></tr>";
}
echo "</table>";
mysql_free_result($result);

?>
</body>
</html>

댓글

댓글 본문
  1. Sonny
    그런데 다음숙제는 sql 에서 불러온 테이블을 보여주는 웹사이트를 호스팅 서비스에 올리려면 어떻게 하는지 궁금합니다. 저는 닷홈에서 무료 호스팅으로 테스트를 하고 있는데요. 로컬 호스트에서는 잘 작동을 하는데 호스팅 서비스에 데이타 베이스는 어떻게 업로드 하는 건지 알려 주시면 정말 감사하겠습니다.
  2. Sonny
    한달동안 해매던 저에게 시원한 냉수를 제공해 주셔서 감사합니다. mysqli_connect를 계속시도 했는데 undefined error 가 계속나와서 방황하던 저에게 웹에서 데이타 베이스 테이블을 보여 주시는 시원한 냉수를 주셔서 감사합니다. 진짜 진짜 감사합니다.
    대화보기
    • pn_stu
      xmapp 에서 구동 중인 유저입니다. xmapp에서는 mysql에 연결할 때 mysql_connect() 대신 mysqli() 을 사용하셔야 하며, root의 기본 비밀번호가 없어 비밀번호 부분을 빈칸으로 해야 합니다. 그리고 mysql_query(), mysql_select_db(), mysql_num_rows(), mysql_fetch_assoc(), mysql_free_result() 도 사용할 수 없습니다.
    • iorobot
      $conn = mysql_connect("localhost", "root", "1234"); 문장을

      $conn = mysqli_connect("localhost", "root", "1234"); 로 변경해보세요.

      Cafe24 PHP 7.0 에서는 mysql 을 mysqli 로 사용해야 정상적으로 처리가 됩니다.
      (다른 mysql 도 모두 mysqli 로 변경해보세요.)
      대화보기
      • Mark
        Cafe24에서 PHP 7.0으로 연습 중인데 에러가 납니다.
        확장 버전 문제라고 하는데
        해결이 안되어
        앞으로 나가지를 못하고 있어
        도움 요청합니다.
        apmset에서는 정상 가동합니다.
        감사합니다.
      • HHHH
        감사합니다.
        조금 실용적인 질문을 드리고 싶은데, 만약 제가 개발한 APP[게임]에서
        Facebook과 연동을 하고 싶다면, Facebook의 API를 받아야 하는것인가요?
        예를들어 리더보드처럼 사용자의 기록을 가지고서 순위를 매기는데, Facebook친구들간의 순위를
        표시하고 싶습니다.

        그리고 해당기능을 실현하기위해 알아야 할 프로그래밍언어라던가 기술지식이 있으면 알려주세요.
      • Sangbok Lee
        아 해결했습니다.
        값이 주어지지 않는다는 뜻인듯해서 혹시나하고 $sql 문을 점검했는데 SELECT * FROM ( DB이름 )으로 해놓고있었네요.
        대화보기
        • Sangbok Lee
          현재 phpmyadmin을 통해 db입력이 끝나고, 아랫분들의 코드를 통해 발생했던 문제들을 해결했는데요, 마지막으로 한 부분이 막혀서 풀리지가 않네요 ㅠ
          계속
          Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\test\index.php on line 28
          Could not successfully run query (SELECT * FROM `sj_test` LIMIT 100) from DB:
          이라는 오류가 출력되요.
          mysqli_error()에 하나의 parameter가 주어져야하는데 현재는 아무런 값도 주어지지 않는다는 의미인듯한데... 혹시 비슷한 문제를 겪으신 분이 있나요?
        • Gweonsu Kim
          mysql query 구문과 관련되어 웹 페이지에 결과가 나타나지 않을 때 해결할 수 있는 코드입니다.
          밑에 'e배속'님이 해결하셨던과 비슷한 코드입니다.

          <!DOCTYPE html>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
          <style>
          table{border:1px solid gray; border-collapse:collapse;}
          td{border:1px solid gray;padding:5px;}
          </style>
          </head>
          <body>
          <?php

          $conn = mysqli_connect("localhost", "root", "비밀번호");
          mysqli_query($conn,'SET NAMES utf8');
          if (!$conn) {
          echo "Unable to connect to DB: " . mysqli_error();
          exit;
          }

          if (!mysqli_select_db($conn,"class")) {
          echo "Unable to select mydbname: " . mysqli_error();
          exit;
          }

          $sql = "SELECT *
          FROM student
          LIMIT 10";

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

          if (!$result) {
          echo "Could not successfully run query ($sql) from DB: " . mysqli_error();
          exit;
          }

          if (mysqli_num_rows($result) == 0) {
          echo "No rows found, nothing to print so am exiting";
          exit;
          }

          // While a row of data exists, put that row in $row as an associative array
          // Note: If you're expecting just one row, no need to use a loop
          // Note: If you put extract($row); inside the following loop, you'll
          // then create $userid, $fullname, and $userstatus
          echo "<table>";
          while ($row = mysqli_fetch_assoc($result)) {
          echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['department']}</td></tr>";
          }
          echo "</table>";
          mysqli_free_result($result);

          ?>
          </body>
          </html>
        • sheis
          잘 봤어요^^
        • e배속
          자문자답입니다. 밑에거 해결한거 소스첨부합니다.

          <!DOCTYPE html>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
          <style>
          table{border:1px solid gray; border-collapse:collapse;}
          td{border:1px solid gray;padding:5px;}
          </style>
          </head>
          <body>
          <?php

          $conn = mysqli_connect("localhost", "root", "gnqlwjr1","class");
          mysqli_query('SET NAMES utf8');
          if (!$conn) {
          echo "Unable to connect to DB: " . mysqli_error();
          exit;
          }


          $sql = "SELECT *
          FROM `student`
          LIMIT 10";

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

          if (!$result) {
          echo "Could not successfully run query ($sql) from DB: " . mysqli_error();
          exit;
          }

          if (mysqli_num_rows($result) == 0) {
          echo "No rows found, nothing to print so am exiting";
          exit;
          }

          // While a row of data exists, put that row in $row as an associative array
          // Note: If you're expecting just one row, no need to use a loop
          // Note: If you put extract($row); inside the following loop, you'll
          // then create $userid, $fullname, and $userstatus
          echo "<table>";
          while ($row = mysqli_fetch_assoc($result)) {
          echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['department']}</td></tr>";
          }
          echo "</table>";
          mysqli_free_result($result);

          ?>
          </body>
          </html>
          대화보기
          • e배속
            혹시 우분투에서 list.php 파일 웹으로 실행하면 아무것도 안뜨는분 있으신가요?
            php는 제대로 동작하는것 같은데 mysql이랑 연동이 안된는지 이상하게 아무것도 안뜨네요
            비밀번호도 1234일때 아무런 경고창도 안떠요
          • 헬리사우드
            뒷북이지만... https://opentutorials.org......361 참고해주세요
            대화보기
            • 1 À̼÷ ÄÄÇ»ÅÍ°øÇаú
              2 ¹ÚÀç ¿µ¹®°ú
              3 ¹éÅ ÄÄÇ»ÅÍ°øÇаú
              4 ±è°æ ±¹¹®°ú
              6 ±è°æ ±¹¹®°ú
              7 ¹Ú°æ ±¹¹®°ú
              8 ±èÁ¤ ¿µ¹®°ú
              php에서 위에처럼 폰트가 깨져서 나옵니다.
              어떻게 해야 할까요?
            • NamJin Kim
              아 저는 윈도 설정에서 작동이 안되네요 뭔가 apmsetup 으로 제가 phpmyadmin을 안깔아서 그런거같아요
            • 감사합니다
            • ㄷㄷㄷㄷ
              1234로 되어있는거 설정하신 비밀번호로 바꾸세요 설정안하셨으면 아마 apmsetup이실듯
              대화보기
              • JustStudy
                고맙습니다
              • 이주환
                2016. 04. 13.
                정독했습니다. ㅎㅎ
              • 감사합니다ㅠㅠ 덕분에 돌아가요
                대화보기
                • w3school
                  w3school 이 홈피에 다 있습니다.
                  대화보기
                  • oh yes
                    리눅스나 윈도우나 같습니다
                    대화보기
                    • webbie
                      php로 입출력 하는 여러가지 방법을 알려 주시면 감사하겠습니다!!!.

                      배열이랑 for문을 이용해서 입력 을 받아서

                      출력을 여러가지 형태로 할 수 있는 방법에 도움을 주실수 있을까요?
                    • 쥬슈야
                      첫번째 동영상 내용에 리눅스의 설명을 기본으로 하고 있지만, 윈도우 사용자분도 이 영상을 보신 후 뒤이어 windows 용도 동영상을 봐주세요. 라는 내용이 있으면 좋겠네요.
                    • 대학생이므니다
                      안녕하세요~ 요즘 데이터공부를 하고있는 학생입니다.
                      제가 mysql의 데이터를 c언어에 보내려고하고있는데요.
                      알아보니 mysql의 헤더파일과 라이브러리파일을 찾아 연결을 해야되더라구요.
                      근데 제가 egoing님이 알려주신대로 apm setup을 통해 mysql을 다운로드했는데
                      도저히 lib파일과 헤더파일의 경로를 못찾겠습니다..ㅠㅠ
                      도움을 좀 주실수있을까요?
                    • 조신부리
                      감사합니다
                    • 정말로 감사드립니다. ㅠ 감동입니다
                    • 부탁드립니다 ㅠㅠㅠㅠㅠ
                      정말 유용한 정보 감사합니다 .죄송하지만 한가지만 여쭤봐도 되겠습니까?
                      안드로이드 폰을 client로 php를 통해 mysql 에 접근하고 데이터를 얻어오는 방식을 구현하고자 합니다.

                      예를들어, A라는 테이블의 내용을 프린트해주는 list.php가 있다고하면,
                      로컬에서는 localhost/list.php 하면 출력이 되는데,
                      외부 즉, 안드로이드 클라이언트에서 하려면 외부주소 xxx.xxx.xxx.xxx/list.php를 하면 없는 파일이라고 나오는데, 어떻게 해야 외부에서 list.php파일로 접근가능한가요?
                    • 엔터를 땅치면 요롷케
                      아리가또!!!!!
                    • 지키리
                      감사합니다!!
                    • 금도끼은도끼
                      msql을 PDO방식으로 바꿔어요 참고하세요
                      <!DOCTYPE html>
                      <html>
                      <head>
                      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
                      <style>
                      table{border:1px solid gray; border-collapse:collapse;}
                      td{border:1px solid gray;padding:5px;}
                      </style>
                      </head>
                      <body>
                      <?php
                      $dbh = new PDO ('mysql:host=localhost;dbname=class','root','111111');
                      $stmt = $dbh->prepare('SELECT * FROM student');
                      $stmt->execute();
                      $list = $stmt->fetchAll();

                      echo "<table>";
                      foreach($list as $row) {
                      echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['department']}</td></tr>";
                      }
                      echo "</table>";
                      ?>
                      </body>
                      </html>
                    • sssssqew
                      저도 코드에서 비밀번호 설정을 '1234'로 해서 리눅스와 윈도우 모두 실수했네요 ㅎㅎ;;

                      이고잉님 강의 아주 잘 듣고 있습니다. 코딩이 점점 재미있어지네요.
                      그리고 앞으로 개발자로 성장하는데 어떤 마음가짐을 가져야 하는지도 알려주시고 감사합니다.
                    • 코딩코코
                      강의 무지 하게 넘넘 감사하게 보며, 즐기고(?) 있습니다.
                      혹시 저처럼 고생 하시는 분이 있을까봐 ....
                      저는 Bitnami를 설치하여 MySQL을 실습중인데,
                      php.ini를 수정하지 않은체 걍 실습 하니 첫 줄 $conn = mysql_connect("localhost", "root", "leefrank");에서 부터 Error가 나서 한참을 고생 했네요 ^^;

                      처음 설치 후 php.ini를 수정 해야 올바로 실행이 되거군요. (extension 이라 부르더군요), 처음부터 개발자용 ini에 넣어 주면 편할것을... 하지만 2줄만 수정 하여 간단히 해결 하였습니다 ~

                      우선 php.ini를 수정합니다 (c:\Bitnami\wampstack-5.4.31-0\php\php.ini)

                      extension=php_mysql.dll 에서 ";"를 제거 해야 하고 (코멘트 처리 되어 있었음)

                      그 아래쪽에,
                      extension_dir = "c:\Bitnami\wampstack-5.4.31-0\php\ext"
                      를 한줄 더 추가로 넣고 난 후 php.ini를 저장 한 후 빠져 나오시면 일단 절반은 성공 ~,

                      다시 "Restart All"(manager-windows에서 "manager service")해 주니까 비로서 실행이 되더군요 ~
                    • egoing
                      php가 동작하고 있나요?
                      대화보기
                      • YOUNG RYEOL
                        echo가 기본적으로 실행되는지 보려고
                        <?php
                        echo "Hello";
                        ?>

                        로 코딩하고 실행해보면 Hello 라는 문자가 출력되는것이아니라
                        웹페이지상에
                        <?php
                        echo "Hello";
                        ?>

                        가 그대로 출력됩니다... 어찌해야할까요?ㅠ
                      • 아에이오우z
                        자바와 DB를 연동하는부분은 어떻게 공부하는게 좋을가요????
                      • 김태훈
                        아~ 정말 부끄럽네요...
                        새벽에 봐서 그랬던건지 html문서내에 비밀번호 1234를 똑같이 붙여넣고 계속 헤메고 있었네요...OTL
                        혹시나 저같은 사람이 없었으면 하는 마음에서 부끄럽지만 글은 안지우고 그냥 둘게요..^^;;
                      • 김태훈
                        어떤 비밀번호를 말씀하시는 건지?... phpmyadmin들어오는건 잘 들어왔고 student table도 만들었습니다. 거기에 phpmyadmin말고 다른비밀번호가 있나요?? htdocs에 있는 다른 html파일들은 잘 실행이 되는데 sql과 php 연동되는 부분에 뭔가 문제가 있는 것 같은데 뭐가 잘못된건지 잘 모르겠네요...T.T
                        대화보기
                        • egoing
                          비밀번호가 틀린 거 아닐까요?
                          대화보기
                          • 김태훈
                            window7사용중인데 마지막에 list.php를 localhost에서 실행하려니 이런게 나오네요...
                            왕초보라 뭘 어떻게 해야되는지 모르겠네요...T.T

                            Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in C:\APM_Setup\htdocs\list.php on line 13

                            Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\APM_Setup\htdocs\list.php on line 14

                            Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\APM_Setup\htdocs\list.php on line 14
                            Unable to connect to DB: Access denied for user 'ODBC'@'localhost' (using password: NO)
                          • baekdata
                            정말 감사합니다 ^^
                          • 이강민
                            php 내부에서 실행되는 내용은 외부에서 볼 수 없습니당~
                            대화보기
                            • JaeWon Jang
                              너무 재밋네요 ㅋㅋ 요기서 맛보기하고 오늘 바로 서점갑니다. 언넝 뭔가 만들어보고싶네요 ㅋㅋ
                            • Ana Log
                              body 첫 부분을 보면 mysql에 접근할 수 있는 비밀번호를 적게 되어있는데
                              혹시, 유출 가능성은 없나요?
                            • hoiyada
                              좋은 내용인 듯 합니다. 감사합니다
                            • Starmomo
                              MySQL을 PHP에서 불러오는 부분. 매우 유용했습니다. 웹페이지의 데이타를 MySQL과 저장하는 것과 MySQL과 연결하여 웹페이지에서 보여주는 사례를 더 보았으면 좋겠습니다. 이고잉님, 고맙습니다.
                            • Lee. Seong Gwan
                              저는 mac에 /var/www 디렉토리가 없어요 ㅠ