접속
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 를 통해서 알 수 있다.
'코딩공부 > WEB3 - PHP & MySQL' 카테고리의 다른 글
[6] PHP & MySQL 보안 (0) | 2019.10.07 |
---|---|
[5] PHP와 MySQL의 연동, SELECT (0) | 2019.10.07 |
[3] 나에게 필요한 PHP MySQL API 찾기 (0) | 2019.10.04 |
[1] PHP와 MySQL의 연동원리, MySQL의 client로서 PHP (0) | 2019.10.04 |