본문 바로가기
server/php

[error] Uncaught Error: Call to undefined function mysqli_connect()

by 윈 Win 2021. 7. 21.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Error][PHP] Uncaught Error: Call to undefined function mysqli_connect() — Win Record (tistory.com)

 

 


 

 

 

문제상황

다음과 같은 코드로 mysql에 접속하는 것을 테스트하려는데, 오류가 발생했다.

// DB 연결
$conn = mysqli_connect($host, $username, $password, $dbname);
if (!($conn)) {
    echo "db 연결 실패: " . mysqli_connect_error();
} else {
    echo "연결 성공";

    $sql = "select * from user;";
    $result = mysqli_query($conn, $sql);
    print_r($result);
}

그리고 나타난 오류 메세지

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/hello.php:13 Stack trace: #0 {main} thrown in /var/www/html/hello.php on line 13

line 13은 맨위 코드에서 두번째줄을 가리킨다.

 

원인

mysqli 확장이 로드여부를 다음과 같이 확인한 결과, false를 출력해, mysqli이 로드되지 않은 것을 확인할 수 있었다.

var_dump(extension_loaded('mysqli')); // bool(false)

 

해결

방법 1) php-mysqli 설치하기

php-mysqli를 설치한다. php버전과 상관없이 필요한 패키지가 자동으로 설치된다.

sudo apt-get install php-mysqli

 

이후 서버를 재시작한다. 우분투에 설치된 아파치의 경우 다음과 같이 한다.

systemctl restart apache2

 

 

방법 2) php 설정에서 mysqli 사용 설정했는지 확인하기

php.ini 파일을 확인해본다.

파일 위치를 모른다면 터미널에서 다음과 같은 명령어를 통해 파일 위치를 찾을 수 있다.

sudo find / -name php.ini

 

php.ini 파일 내에서 extension=mysqli 부분이 주석처리되어있는지 확인한다.

주석처리되어있다면, 주석을 풀어준다.

;extension=intl
;extension=imap
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql

(위의 경우 php가 extension을 사용하도록 설정하는 것인데, 이 확장 기능은 php 5.5 이상부터 deprecated된다고 한다.)

 

이후 서버를 재시작한다. 우분투에 설치된 아파치의 경우 다음과 같이 한다.

systemctl restart apache2

 

 

댓글