PHP4 시절에 주로 웹프로그래밍 공부를 했던 냉동 프로그래머인 나는 오늘 마음먹고 PHP 7.4를 들여다봤다. 어느새 8.1 시대가 되었다던데 집에 설치된 7.4를 토대로 MariaDB 연동 실험을 했다.
전에 하던대로
$ sudo apt install maridb-server
$ sudo mysql_secure_installation
$ sudo systemctl restart mariadb
$ sudo mysql -u root -p
mysql) use mysql;
mysql) CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
mysql) GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'localhost' WITH GRANT OPTION;
mysql) FLUSH PRIVILEGES;
mysql) exit;
$ sudo apt install phpmyadmin
$ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
$ sudo a2enconf phpmyadmin
$ sudo systemctl restart apache2
이렇게 해두었구요. php는 세팅이 apache2 설치시 이미 되어있었고 원격에서 phpinfo() 가 잘 표시되었습니다. phpmyadmin을 user_name으로 접속해서 usage 권한만 가진 유저 추가하고 같은 이름으로 db도 추가했죠.
이 상태에서 mysqli 실험을 했죠. 아래처럼 코드를 짰습니다.
<?php
$conn = mysqli_connect("localhost", "user_name", "password");
if ($conn) { echo "Successfully connected MariaDB"; } else { echo "Failed to connect MariaDB; }
?>
작동을 안하고 500 에러 뿜씁니다. 보통 500에러는 서버 문제이거나 스크립트 문제인데요. 보통 DB 연결시 세팅을 봐야 합니다. 그래서 여러 삽질을 한 끝에 살펴보니 두가지가 잘못되어 있었습니다.
우선 mysqli_connect의 마지막 변수로 db명도 적어주어야 했고
$conn 값이 resource가 아닌 object라, 연결 성공 여부를 다른 코드로 해야 했습니다.
$conn = mysqli_connect("localhost", "user_name", "password", "db_name");
if ($conn->connect_errno) { echo "Failed to connect MariaDB"; } else { echo "Successfully connected to MariaDB; }
이렇게 하니 되네요. 확실하게 하려면 쿼리도 날려야되지만 일단 멈췄습니다. PHP가 버전업되면서부터 mysqli 의 사용을 객체지향적으로 해야되나 봅니다.
워드프레스 코드를 살펴보니 6.0에서 MySQL 사용시 mysqli_init() 함수와 mysqli_real_connect() 함수를 쓰던데 더욱 더 세분화된 처리가 가능한 것 같습니다.
쉬운 사용례지만 보여봅니다. 참고가 되실 경우가 있을 것 같애요. PHP4 시절에 쓰다가 안쓴 한량이 정리해둡니다.
참고로 phpmyadmin 전체 기능을 쓰는 user_name을 정해서 로그인한 후에 db명과 같은 다른 user_name 추가해서 실행하시길 권합니다. 예제 코드에서는 같은 user_name, password처럼 해두었는데 사실 phpmyadmin 실행해서 거기서 추가한 user_name이네요. 보안상 좋은 것 같습니다.
참고로 phpmyadmin 전체 기능을 쓰는 user_name을 정해서 로그인한 후에 db명과 같은 다른 user_name 추가해서 실행하시길 권합니다. 예제 코드에서는 같은 user_name, password처럼 해두었는데 사실 phpmyadmin 실행해서 거기서 추가한 user_name이네요. 보안상 좋은 것 같습니다.