본문 바로가기

웹 개발

[1주차] MySQL - PHP 연동해서 화면 띄우기 & 에러 해결기...

php와 mysql 연동하는 코드

<?php
$conn = mysqli_connect("localhost","root","password");
mysqli_select_db("database");
$result = mysqli_query($conn,'SELECT * FROM tablename');
$row = mysqli_fetch_assoc($result);
$row['title'];
?>

처음에는 위와같은 코드가 아니었다.

밑에서도 말할건데

첫 명령어

$conn = mysqli_connect('localhost','root','password','database');

로 했었는데, 오류가 생겼다.

 

 

---------------------------------------------------------------------------------------------------------------

 

???????????

이거 뭐임

 

 

그 어떤 알림도 없이 빈 화면만 출력된다.

 

 

이거 때문에 답답해서 디코방에다 질문을 계속 올렸던 것 같다..

다들 도움을 주시려고 계속 이런 코드 해보시겠어요? 하면서 도움을 주셨다

하지만 해결 못한게 함정

 

몰랐는데 php에서

error_reporting(E_ALL);
ini_set("display_errors",1);

를 입력하면 문제가 어떤 건지 화면에 출력해준다.

 

이걸 안하면 뭐가 문젠지 모르고 삽질만 반복하게 될 수도 있다

코드를 입력했더니, 빈 화면만 나오던 페이지에서 에러 로그를 출력해준다.

 

Uncaught Error라고 한다. mysqli_connect를 읽지 못하고 있는 상황

열심히 구글링해본 결과 저 var_dump 구문으로 mysqli가 정상적으로 설치되어있는지를 테스트해보는 게 좋을 것 같아 코드에 넣어봤더니 역시나 false가 뜸...

phpinfo()에서도 mysqli가 떴다가 안떴다가 난리법석이었따 역시 쉬운건 없군..

 

구글링 하면 예전 자료에 mysqli 가 아니라 mysql 패키지도 있고 한데 이건 2012년 이후로 더 이상 사용되지 않는다고 한다. MySQLi로 확장된 것이 맞고, 이 때의 i는 개선을 의미한다..고 한다

 

절차적 방법

$conn = mysqli_connect("hostname","username","password","database");

 

객체 지향 방식

$conn = new mysqli("hostname","username","password","database");

 

해결....방법

 

결국 다시 깔았다. 해결법을 못 찾아서...

아마 추측하건대 루트 디렉토리의 기본 경로를 GUI로 보기 편하려고

home 이후로 바꾸면서 권한을 못 건드린 게 있거나

apache/php/mysql 을 따로따로 설치하는 과정에서 호환에 문제가 생겼거나

이 두 가지 중 하나의 문제라고 생각한다.

 

그래서 이번에는 새로 깔되 똑같은 방식이 아닌 한번에 설치할 수 있는 명령어를 입력했다.

 

대 박

sudo apt install lamp-server^

이 명령어를 입력하면 apache2/php/mysql 을 호환이 되게 바로 설치해주고

 

심지어 ubuntu를 켜면 apache2와 mysql이 자동실행 되도록 설정도 되어있다.

 

 

다음부터 혹시 다른 사람에게 알려줄 기회가 있다면 따로따로 설치하지 말아야지..

 

둘다 잘 켜져있군

 

밑의 명령어를 입력하면 mysql과 apache2가 현재 어떤 상태인지 알 수 있게 된다.

# systemctl status mysql
# systemctl status apache2

 

 

mysql에서 test라는 database를 다시 새로 하나 만들었다.

그리고 그 안에 topic이라는 table을 만들고 여러 정보를 넣는다.

 

그렇게 명령어를  다 입력한 후, SELECT * FROM topic;으로 확인해보니

잘 입력되있는 것을 볼 수 있다.

 

우선 잘 연결되는지 확인해보자.

$conn 연결을 시도하고, 만약 변수값이 없다면 DB FAIL이라는 문자열을 뱉도록 설정되어있다.

 

드디어!!!!!!!!!! SUCCESS가 된다.

???

아 또 나한테 왜이러냐

 

에러를 해석해보니 

mysqli_select_db 에 database 이름을 넣고

mysqli_query에 table 이름을 넣지 않아서 생긴 문제 같았다.

 

처음 $conn = mysqli_connect('localhost','root','password','test');

라고 입력한 레퍼런스들이 많아서 한번에 db까지 연결해도 되는줄 알았는데 아니었다.

그 역할은 mysqli_select_db에서 수행하는 거였다.

 

 

 

수정했더니 드디어 성공!!!

table에 넣어놨던 메시지가 출력되는 걸 볼 수 있다.