본문 바로가기

코딩공부/WEB3 - PHP & MySQL

[4] PHP와 MySQL의 연동, INSERT

접속

mysqli_connect 를 이용해서 MySQL Server에 접속

 

MySQL Improved Extension > Dual procedural and object-oriented interface > mysqli::__construct()

mysqli::__construct 객체지향방식(Object oriended style)

mysqli_connect 함수형 코딩(Procedural style)

 

각 파라미터 클릭하면 Parameters 에서 어떠한 내용을 넣어야하는지 설명을 볼 수 있다.

 

※ query.log

PHP 서버에서 어떠한 일이 일어나는지 log를 통해 화면에 뿌려보면 도움이 된다.

MySQL Server에 내린 명령에 대한 기록들이 ~/wampstack-x-x-x/mysql/data/query.log 파일에 기록된다. (따로 설정 필요)

접속, sql문 실행하는 것이 내부적으로 동작하는지 확인할 수 있다.

MySQL Server에 도착하는 명령들을 특정 파일에다가 추가 시키는 방법
mysql general_log enable

[참고 - MySQL Query 기록하기 - general_log ]

 

insert.php 에 다음과 같이 MySQL 서버에 접속하는 코드를 한줄 작성 후, 웹브라우저에서 insert.php 페이지에 접속하면, MySQL 서버의 log를 통해 'Connect' 작업이 이루어진 것을 확인할 수 있다.

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

 

쿼리

mysqli_query 를 이용해서 MySQL Server에 SQL문을 전송

데이터베이스에 데이터를 추가

 

mysqli_query(연결정보, sql문)

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

 

1. 웹브라우저에서 insert.php 로드

2. MySQL Server 로 어떠한 명령이 들어왔는지 확인

3. MySQL Monitor로 데이터가 잘 추가됐는지 확인

 

 

topic 테이블을 조회하면 insert.php 가 로드될 때마다 데이터가 추가된 것을 확인할 수 있다.

 

디버그

mysqli_error 를 이용해서 문제가 발생했을 때 원인을 규명하는 방법

 

1. MySQL Monitor 를 이용한 방법

sql 문을 직접 mysqli_query()에 집어 넣지 않고, $sql 변수에 저장한다.

문제가 있을 때 echo $sql 을 통해서 문제를 확인해 나갈 수 있다. ( php는 기본적으로 문제가 있을 때 알려주지 않는다. )

echo $sql 로 출력된 sql문을 복붙하여, SQL Monitor에서 다시 실행 시킨다.

SQL Monitor에서 에러의 내용을 확인할 수 있다.

 

<?php
// $mysqli = mysqli_connect("example.com", "user", "password", "database");
// $res = mysqli_query($mysqli, "SELECT 'Please, do not use ' AS _msg FROM DUAL");
// $row = mysqli_fetch_assoc($res);
// echo $row['_msg'];
$conn = mysqli_connect("localhost", "root", "111111", "opentutorials");
$sql = "
    INSER INTO topic (
        title,
        description,
        created
    ) VALUES (
        'MySQL',
        'MySQL is ....',
        NOW()
    )";
echo $sql;
mysqli_query($conn,$sql);
 ?>

 

 

2. mysqli_error 를 통해서 알아내는 방법

how to get error in php mysqli

 

어떤 에러가 발생했는지 데이터베이스 서버가 알려주는 정보를 PHP가 출력해준다.

 

3. mysqli_query 이용

쿼리문을 서버로 전송하는 api, api에서 에러가 발생했을 때 조건문으로 묶여 있다. mysqli_query의 사용설명서를 확인해보자

if (!mysqli_query($link, "SET a=1")) {
    printf("Error message: %s\n", mysqli_error($link));
}

 

실패했을 때 'FALSE'를 리턴값으로 반환한다. 정보를 읽는 것과 관련된 쿼리를 실행했을 때는 mysqli_result 라는 객체를 반환한다.

그 외, INSERT, UPDATE, DELETE 와 같은 명령을 실행했을 때 결과가 성공하면 'TRUE'를 리턴한다. 

 

mysqli_query의 리턴값의 특성을 이용하면 어떤 명령을 실행했을 때 성공했는지 실패했는지를 확인할 수 있다.

실패 시 에러메시지를 출력하거나, 로그파일로 저장하는 등의 작업을 할 수 있다.

$result = mysqli_query($conn,$sql);
if($result == false){
    echo mysqli_error($conn);
}

 

 

※ 주의 ※ 

개발시에는 에러메시지를 echo로 출력할 수 있지만, 서비스할 때는 절대 이렇게 출력해서는 안된다.

데이터베이스의 테이블 구조, 컬럼명 등의 중요한 정보를 노출시키는 위험이 있다.

파일에 저장해서 외부에서는 볼 수 없도록 해야한다.

 

 

4. mysqli_connect_errorno 이용

데이터베이스 서버에 접속하는 과정에서의 에러는 mysqli_connect_errorno 를 통해서 알 수 있다.