WEB3 - PHP & MySQL

PHP와 MySQL의 연동과 INSERT

수업소개

PHP와 MySQL을 연동하는 방법을 소개합니다. 

 

 

접속

mysqli_connect를 이용해서 mysql server에 접속하는 방법을 알아봅니다. 

 

insert.php

변경사항

<?php
mysqli_connect("localhost", "root", "111111", "opentutorials");
?>

쿼리

mysqli_query를 이용해서 mysql server에 sql문을 전송하는 방법을 알아봅니다. 

영상 내의 SQL 문에 오타가 있습니다. 아래와 같이 VALUE를 VALUES로 변경해주셔야 합니다. 
INSERT INTO topic (title, description, created) VALUES('MySQL', 'MySQL is ..', NOW())

 

insert.php

변경사항

<?php
$conn = mysqli_connect("localhost", "root", "111111", "opentutorials");
mysqli_query($conn, "
    INSERT INTO topic (
		title,
		description,
		created
	) VALUES (
		'MySQL',
		'MySQL is ....',
		NOW()
	)");
?>

디버그

mysqli_error를 이용해서 문제가 발생했을 때 원인을 규명하는 방법을 알아봅니다. 

 

insert.php

변경사항

<?php
$conn = mysqli_connect("localhost", "root", "111111", "opentutorials");
$sql  = "
    INSER INTO topic (
		title,
		description,
		created
	) VALUES (
		'MySQL',
		'MySQL is ....',
		NOW()
	)";
$result = mysqli_query($conn, $sql);
if($result === false){
    echo mysqli_error($conn);
}
?>

 

댓글

댓글 본문
  1. enujo
    23.12.18 Insert!
  2. joykim93
    덕분에 에러 잘 해결했습니다.
    감사합니다:)
    대화보기
    • pmxsg
      2022.01.11. 수업
    • 외노자111111
      혹시나 저같은 오류나시는 분들은 참고해주세요. 인서트 쿼리잘되다가 오류표시(디버그)하려고 mysqli_error() 코드 나 mysqli_connect_error() 쓰는순간 페이지 접속조차안되는 현상(http 500 error) 이 난다면 php 폴더에있는 php.ini 파일에서 ctrl + f 로 검색을 열고 display_error = Off 를 On으로 변경해주시기 바랍니다. 어느 display_error = Off 인지 모르시는분은 display_error 로 인터넷 검색해보시는것을 추천드립니다... 이 키워드 찾기까지 엄청 고생했네요;;;
    • 조건희
      localhost를 입력해서 ip를 찾는건데, localhost에 redirect 주소가 127.0.0.1로 지정되어있지않은 경우에 localhost로 접근할수없습니다.

      쉽게말해 네이버에 실제 ip가 111.222.333.444지만 http://www.naver.com으로 접속이 되죠?
      http://www.naver.com으로 연결할때 위에 ip로 redirect 되는겁니다.
      대화보기
      • chimhyangmoo
        성공!!! 21.06.18
      • chimhyangmoo
        DB에 입력이 되질 않네요... 쉬었다가 다시 도전할 예정...
      • 감사합니다 port번호가 달라서 한참 고생, 해결.
      • jwoh
        21-04-25
      • jeisyoon
        2021.04.15 PHP & MySQL 연동과 Insert - OK
      • hanel_
        21.2.23
      • dlfgh17
        혹시 mysqli_connect("localhost", "root", "111111", "opentutorials"); 이부분에서 localhost대신 127.0.0.1을 입력하면 해결되는 경우가 있던데 왜 그런지 아시나요?
      • kkn1125
        21.01.06.수 완료~!
      • amazon8
        제가 codeanywhere 로 mysql과 php를 사용하고 있습니다.
        그러다보니 mysqli_connect("localhost", "root", "111111", "opentutorials"); 에서 localhost 부분에 어떤 주소를 넣어야 하는지 모르겠습니다. 구글 등 여러 포털사이트에 검색해봤지만 거의 1주일째 해답을 얻을 수가 없었습니다. 혹시 어떤 방식으로 해야 연동을 할 수 있을까요?
      • 김남규
        제 포트 번호는 3306이였는데...다른분들은 3307인분도 계시네요
        포트나 그런것들 인터넷 전반에대해서 알아야 하는것들에 대한 수업이 따로있나요??
        왜 존재하고 역할이 뭐고 어떻게 활용하고...
        포트뿐아니라 인터넷이라는것 자체...
      • jaehyunlee
        05/31 고3 완료
      • Lucas Trowman
        완료!
      • 노트북내에서 mysql로 db를 만들어서 할때는 잘 사용이 되는데
        제가 라즈베리파이내에 따로 db를 만들어서 사용하려고 하는데
        localhost대신 라즈베리파이 아이피주소를 넣고 db이름 비밀번호 다 바꾸고 코드를 짠 다음에
        localhost/PHP_connection.php 대신에 ip주소/PHP_connection.php로 접속을 하면오류가 뜨네요 ㅠㅠ
        localhost대신에 다른 아이피주소를 사용하려면 어떻게해야되나요?
      • Access denied 오류 해결
        Access denied for user 'root'@'localhost' (using password: YES)
        위 메세지와 비슷하게 로그인 불가한 오류
        저 처럼 해메지 마시고 이걸로 해결하셔요..

        [첫번째 방법]
        비밀번호 아무리 맞게 해도 오류 뜨시는 분들
        MySQL 재시작 하시면 됩니다. (bitnami의 경우 [Restart All] 버튼)

        [두번째 방법]
        mysqli_connect(DB호스트, 계정, 비번, DB이름, *포트*);
        맨 뒤에 포트 추가해 주시면 됩니다. 포트 확인 방법은
        (Bitnami > Manage servers > MySQL Database 클릭 > configure)

        예시: mysqli_connect(DB호스트, 계정, 비번, DB이름, 3307);

        전 두번째 방법으로 해결했습니다.
      • 나니양
        mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in

        윗 오류가 뜨시는 분들은 커맨드창에 아래 sql구문을 입력해주시면 됩니다.
        ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

        mysqlUsername : root
        mysqlUsernamePassword : 본인 mysql 비밀번호

        Query OK, 0 rows affected (0.08 sec) 라고 나오면 성공! ㅠㅠ
        php파일 리로드/ 아파치 서버 재실행해 주시면 전 연결이 되더라구요!

        참고 : https://stackoverflow.com......838
      • 허공
        190508 감사합니다.
      • yoonmin
        저는 접속할때 에러로 "MySQL server has gone away"가 뜨는데 어떻게 해결해야되나요? ㅠㅠ
      • incursio
        감사합니다
      • 호호
        해결이 되어 혹시 도움이 될까 적습니다~
        비트나미 매니저에서 Manage Servers->MySQL Database선택->Configure 하면 mysql포트번호가 나옵니다
        $conn = mysqli_connect("localhost", "root", "111111", "opentutorials", 포트번호);
        대화보기
        • 호호
          저는 비트나미가 다른 버전으로 두개가 설치되있는데요
          하나는 localhost:80, localhost:81 뒤에 포트번호를 다르게 해서 들어가는데
          mysqli_connect 할때도 포트번호를 적어서 해줘야 하나요??
          mysql monitor로 확인해도 토픽테이블에 추가가 안되요ㅠㅠ
        • Hanseon Gim
          저도 Windows10 환경이고 강의를 따라가는 중에 똑같은 문제에서 막혔는데 아래 방식으로 해결했습니다.

          { ini파일에 extension=php_mysqli.dll 이 부분 맨앞에 ;를 지워서 주석을 취소해주라고 되어있어서 그렇게 했는데도 안됩니다ㅠ] <== 이부분은 맞고요, 하나 더 설정 주석을 취소해 주여야 합니다.
          php.ini 안의 내용 중 ;extension_dir = "\ext" 이부분의 주석을 없애고 php 설치 폴더의 "\ext" 경로을 지정해 주니 정상적으로 실행이 되더군요.

          예)
          extension=php_mysqli.dll
          extension_dir = "D:\BitNami\wampstact-7.1.23-1\php\ext" <== 저의 php 경로의 예 입니다.
          대화보기
          • 다스호크
            ㅜㅜdb연결이 안되서 connect_errno확인해봤는데 2054뜨는데

            이것좀 해결해주실분...ㅠㅠ
          • Joseph Yang
            사이트에 연결할 수 없음 localhost에서 연결을 거부했습니다.
            이렇게 나왔는데 어떻게 해야하나요...
          • Sungwoong Pyeon
            문제가 생길시에 주저 없이 bitnami server를 삭제하고 다시 설치하세요. 큰 문제가 되지 않습니다. 공부하면서 만들었던 예제 directory는 따로 저장해놓으시고 다시 설치후 htdocs 안에 복사하시면 문제없이 작동합니다.
          • phpphph
            백색 화면이 뜨지만 SELCET * FROM topic; 에 정보들은 있는데 문제가 있는건가요?
          • php_student
            VALUE나 VALUES 나 다 되는 것 같아요
          • 경민
            해결 했습니다. 데이터베이스에 연결시 아래와 같이 하고
            그 아래에 utf8을 설정해주면 됩니다.

            $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
            $mysqli->set_charset("utf8");
            대화보기
            • 경민
              한글이 이상한 알아볼수 없는 문자로 mysql서버에 저장되였는데요.
              혹시 데이터를 mysql서버에 전송시 utf-8로 저장하는 코드가 있을까요?
              mysql서버쪽은 모두 utf-8로 변경했는데도 해결이 안되네요.
            • 궁금해하시는 순서가 뒤바뀌신것 같습니다.
              insert.php에서 백색으로 나오는 이유 ->
              출력이라는 echo코드를 입력하지 않았거나, 출력한 데이터가 없다.
              동영상 강의를 따라서 진행하셨다면 백색으로 나와도 Mysql에 접속된 상태.
              접속만 되었으니 아무것도 안보인다.
              * 코드의 INSERT 구문에서 오류가 없는지 찾아본다.
              VALUES 를 VALUE 라고만 썼다든지 등등.
              echo함수를 쓰지않았으므로 INSERT 구문으로 데이터를 입력했다고 하더라도 화면에는 보여지지 않는다.

              Mysql에서 empty set이라는 이유 -> 테이블에 입력한 값이 없다. 빈공란.
              동영상 강의에서 코트입력부분에서 화면을 멈추고 차근차근 따라하면서 오타가 없는지 확인한다.
              대화보기
              • <?php
                $conn = mysqli_connect("localhost", "root", "111111", "php_db");
                ?>
                위 코드에서 php_db 라는 데이터 베이스를 만드셨나요?
                만들지 않으셨다면 없으니까 들어가지지 않는 것입니다.
                동영상 강의를 처음부터 변경없이 제대로 따라오셨다면 php_db를 지우고,
                그 이름을 opentutorials로 바꿔보시기 바랍니다.
                데이터베이스에 php_db라는 데이터베이스가 없기때문에 작업이 진행되지 않는것 같습니다.
                대화보기
                • 영상에서 INSERT문에 오타 있어요 VALUES가 VALUE로 되어 있네요! 많은 분들이 DB에 입력 안된다고 하는게 이것 때문인거 같습니다.
                • 김희선
                  <?php
                  $conn = mysqli_connect("localhost", "root", "111111", "php_db");
                  ?>

                  저는 아예 접속조차가 안되네요ㅠ
                  아래와같은 오류메시지가 나옵니다.
                  Fatal error: Uncaught Error: Call to undefined function mysqli_connect_error() in C:\Bitnami\wampstack-7.1.19-1\apache2\htdocs\firsthomepage\index.php:2

                  구글에서 검색해보니 ini파일에 extension=php_mysqli.dll 이 부분 맨앞에 ;를 지워서 주석을 취소해주라고 되어있어서 그렇게 했는데도 안됩니다ㅠ
                  윈도우 환경에서 개발중인데 저와 같은 오류나시는 분 계신가요?
                • 정병성
                  오류도 나오지 않는데도 불구하고 mysql 클라이언트를 이용한 환경이 아니라 비트나미경로에있는 mysql 파일을 통해 접속하였음에도 불구하고 insert.php 파일에 접속을 하면 백색의 아무것도 없는 페이지만 나오는데 mysql 에서 확인해보면 empty set 으로 나옵니다... 도와주세요 .. 어제부터 모든 검색을 다해봤는데도 나오지를 안네요 ..
                • 정병성
                  연동실습에서는 command line client 를 사용하면안되는건가요 ?
                  현재 command line client 를 사용하여 실습진행중입니다만. 커맨드라인 입력시에는 데이터 삽입이 잘 되는것을 확인 할 수 있는데 php 함수를 통해 삽입을 하니 전달이 안되는듯합니다.
                  $conn변수에는 $conn = mysqli_connect("localhost","root","****","opentutorials");
                  위와같이 담았는데 안되네요... 계정이 root 인것은 select current_user(); <<구문을 통해 루트 계정이 현재 사용중인 계정인것을 알았습니다. 하지만 php 에서 동작이 안됩니다.
                  이유가 뭘까요 ?
                • 코드를 제대로 입력하셨고, 내용을 변경하지 않았다면 때때로 초기화 해보는 것도 좋은 방법입니다.
                  1) cmd -> mysql monitor login
                  /mysql -uroot -p111111
                  2) SHOW DATABASES;
                  +--------------------+
                  | Database |
                  +-----------------------+
                  | information_schema |
                  | mysql |
                  | opentutorials |
                  | performance_schema|
                  | test |
                  +----------------------+
                  3) 목록중에 있는 opentutorials 제거
                  /DROP DATABASE opentutorials;
                  4) 강의에서 opentutorials 테이블 생성부분부터 그대로 따라하시면 됩니다.
                  대화보기
                  • yong
                    <?php
                    $conn = mysqli_connect("localhost", "root", "111111", "opentutorials");
                    $sql = "
                    INSERT INTO topic (
                    title,
                    description,
                    created
                    ) VALUES (
                    'MySQL',
                    'MySQL is ....',
                    NOW()
                    )";
                    $result = mysqli_query($conn, $sql);
                    if($result === false){
                    echo mysqli_error($conn);
                    }
                    ?>

                    코드를 위에 처럼 제대로 입력한거같은데 php를 실행시키면 Table 'opentutorials.topic' doesn't exist
                    opentutorials.topic 테이블이 계속 존재하지않는다고 뜨는데 어떻게 해야하나요 ?? ㅜㅜ
                  • 하나 빠트렸네요.. insert.php에서 경고 뜨고 접속 안되는 분들은 "localhost" 대신 "127.0.0.1"로 시도해보세요
                    mysqli_connect("127.0.0.1", "root", "111111", "opentutorials"); 이렇게요^^

                    insert.php에서 다음과 같은 경고 뜨는 분들은 새로 다운 받을때 패스워드 선택 바꾸고, localhost도 위와 같이 바꾸면, 잘되실 거예요~^^

                    Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
                  • insert.php 에서 경고 메세지 뜨면서 MySQL에 접속이 안되시는 분들은, 아마도 저처럼 MySQL 다운로드시 패스워드 선택할때 위쪽 패스워드를 선택하셨을 겁니다 (그게 자동선택되어 있습니다).

                    MySQL 다운 받은 걸 Uninstall 하시고 (맥의 경우, MySQL start 버튼 눌렀던 곳(System Preferences -> MySQL)에 가면 아래쪽에 uninstall 버튼 있습니다. 체크 창이 뜨는데 체크도 하시구요) 새로 다운로드 받으실때 아래쪽 패스워드 선택하세요 (Use Legacy Password Encryption 버튼입니다. 이미 체크 되어 있는 Use Strong Password Encryption 말구요)

                    아마도 php mysqli 가 strong password를 아직 지원하지 않아서 생긴 문제인것 같습니다. 이런 자잘한 것들에 넘 스트레스 받지 마시구요, 검색도 해보고 이것저것 시도도 해보고 하면서 꿋꿋히 공부해나가시길 기원합니다^^

                    (참고로, 검색해보니, stackoverflow에서 다음 글을 발견하고 위 방법을 시도하게 됐습니다. "Currently, php mysqli extension do not support new caching_sha2 authentication feature. You have to wait until they release an update.")
                  • 양항준
                    Header 안에 POST 변수를 불러서 글쓰고 나서 글이 써진 해당 페이지로 돌아가는 방법이 있을까요? 매번 index 패이지로 돌아가는 건 불편해 보여서요
                  • powhyckf
                    싹다 지우고 다시 깔고 하니까 잘되네요 ㅋㅋ
                  • cdyh
                    Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
                    위와 같은 경고메세지가 웹브라우저에서 출력이 되며, 데이터베이스에 접속이 안 됩니다.
                    구글링해보니 caching_sha2_password 인증 방식을 php에서 현재 지원을 아직 안 하고 있는 것 같은데
                    어떻게 해결방법이 없을까요?ㅠㅠ
                    데이터베이스랑 php 연동 자체가 안 되니 수업 진행이 안 되네요 ㅜㅜ
                  • 쓸기몬
                    insert.php 에서 새로고침을 해도 cmd로 쿼리 전송이 안되요 connect에 문제가 있는 걸까요? mysqli_error로 출력해 봐도 아무것도 안나옵니다.ㅠ
                  • cmj88@naver.com
                    insert.php를 실행하면 unknown database 'opentutorials' 이런 경고 메시지가 뜹니다. cmd에서 opentutorials db만들고 topic table도 만들었는 왜 안될까요?
                  • egoing
                    apache/logs/error.log 파일의 제일 아래쪽에 어떻게 적혀있는지 확인하시면 도움이 됩니다.
                    대화보기
                    • 실습을 두세번 반복해서 진행했으나, 웹 브라우저상에 아무것도 나타나지 않습니다.
                      아파치서버는 비트나미로 켜진상태이고, MySQL도 켜져있는 상태이구요..
                      index.php는 접속이 되는데, insert.php는 화면상에 아무것도 나타나지 않는군요...
                      해당 방법에 대해서 진행하는 방법을 알려주시면 감사하겠습니다..
                    버전 관리
                    egoing
                    현재 버전
                    선택 버전
                    graphittie 자세히 보기