공부하는 이야기 – 2022년 6월 16일 낮 2시 39분

Posted on

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 시절에 쓰다가 안쓴 한량이 정리해둡니다.

2 thoughts on “공부하는 이야기 – 2022년 6월 16일 낮 2시 39분

  • 참고로 phpmyadmin 전체 기능을 쓰는 user_name을 정해서 로그인한 후에 db명과 같은 다른 user_name 추가해서 실행하시길 권합니다. 예제 코드에서는 같은 user_name, password처럼 해두었는데 사실 phpmyadmin 실행해서 거기서 추가한 user_name이네요. 보안상 좋은 것 같습니다.

  • 참고로 phpmyadmin 전체 기능을 쓰는 user_name을 정해서 로그인한 후에 db명과 같은 다른 user_name 추가해서 실행하시길 권합니다. 예제 코드에서는 같은 user_name, password처럼 해두었는데 사실 phpmyadmin 실행해서 거기서 추가한 user_name이네요. 보안상 좋은 것 같습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다