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에 넣어놨던 메시지가 출력되는 걸 볼 수 있다.
'개발 > 웹 개발' 카테고리의 다른 글
[2주차] 로그인 구현 #2 - 세션을 이용한 PHP 로그인 기능 구현 (0) | 2023.04.11 |
---|---|
[2주차] 로그인 구현 #1 - 메인 페이지 /로그아웃 기능 구현 (0) | 2023.04.10 |
[1주차] GET / POST 메서드로 웹 서버에 데이터 보내기 (0) | 2023.04.05 |
[1주차]Happy Hacking 글자 화면에 출력하기 (0) | 2023.04.04 |
[1주차]Ubuntu linux 가상 pc 환경에 APM 설정하기 (Apache + PHP + MySQL) (0) | 2023.03.31 |