"치명적인 오류 : 'MySQLi'클래스를 찾을 수 없음"을 해결하는 방법은 무엇입니까?


94

튜토리얼을 진행 중이며이 오류가 발생합니다.

치명적인 오류 : 8 행에서 'MySQLi'클래스를 찾을 수 없습니다 (긴 URL).

8 행의 코드는 다음과 같습니다.

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);

온라인에서 누군가가 내 phpinfo ()에서 켜 졌는지 확인하라는 말을 봤지만 "mysqli"에 대해 아무것도 나열되지 않았습니다.

또한 PHP 버전 5.2.5를 실행하고 있습니다.


손으로 쓴 MYSQLi 클래스를 사용할 수 있으므로 mysqli를 설치할 필요가 없습니다. 서버를 소유하지 않은 경우 유일한 솔루션입니다.


답변:


86

MySQLi설치 하기 만하면되는 것 같습니다. .

그렇게했다고 생각하고 여전히 문제가있는 경우 운영 체제 및 추가 진단에 도움이 될 수있는 기타 사항을 게시하십시오.


21
AWS에서는 그냥 실행합니다sudo yum install php-mysqli
bobobobo 2014-09-11

나를 위해 apt-get install php7.0-mysql로 ​​수정되었습니다. 나는 Raspbian 스트레치 9에서 실행하고
negrotico19

amazon linux를 사용하는 AWS에서는 다음과 같습니다 sudo yum install php56-mysqlnd.x86_64(설치 한 PHP 버전과 일치하는 것을 선택)
auspicious99

46

다음 코드를 실행하여 mysqli 라이브러리가 있는지 확인할 수 있습니다.

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}

6
여전히 "우리는 mysqli가 없습니다 !!!"라는 메시지가 나타납니다. `sudo apt-get install php5-mysqlnd`를 실행 한 후에도?
Banned_User

나는 'Phew we have it'을 얻었지만 Class 'msqli'가 발견하지 못한 동일한 오류가 계속 발생합니다.
PA-GW

38

Ubuntu 에있는 경우 다음을 실행합니다.

 sudo apt-get install php-mysqlnd

5
그리고이 후에 Apache를 다시 시작하는 것을 잊지 마십시오!
fracz

@fracz Apache를 다시 시작하는 것은 내가 잊은 부분입니다. MySQL 만 다시 시작했습니다. 감사.
James

충분하지 않다. 나는 여전히 php5-mysql 패키지가 부족했습니다. sudo apt-get -y install php5-mysql php5-mysqlnd둘 다 얻으려면 사용하십시오 . @Hermann Ingjaldsson, 당신이 놓친 것이 있습니까?
Balmipour 2015 년

구성 오류였습니다. stackoverflow.com/questions/31535173/...
Fzs2

21

네임 스페이스가 지정된 클래스 내에서 "new mysqli (..)"를 호출하는 경우 유사한 오류가 표시 될 수 있습니다 Fatal error: Class 'foo\bar\mysqli' not found in. 이 문제를 해결하는 방법은 다음과 같이 선행 백 슬래시를 사용하여 루트 네임 스페이스에 명시 적으로 설정하는 것입니다.

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);

1
이것이 가장 먼저 살펴 봐야 할 것입니다.
James Bailey

15

의 주석 외에도 php_mysqli.dll의 에서 확장 php.ini의 도의 주석 을 extension_dir의 지시문 php.ini 파일을 당신의 위치를 지정합니다 :

extension_dir = "C:\software\php\dist\ext"

이것은 나를 위해 작동했습니다.


그것은 나를 위해 일했지만 ./ext상대 경로입니다. 그리고 나는 이름을 변경했다 php.ini-developmentphp.ini해당 파일에 주석하고 extension=php_mysqli.dll. 오, PHP를 그리워하지 않았습니다.
Overdrivr

나를위한 트릭 (Windows)은 "extension_dir"에 확장자 dir에 대한 절대 경로를 입력하는 것입니다.
TechNyquist


2

php.ini에서 mysqli를 활성화하는 방법

  1. php.ini에서 다음 구성을 ';'(콜론) 제거하여 편집 / 주석 제거 : 1st (주석 제거 및 구성 추가) : include_path = "C : \ php \ includes" 2 차 (주석 제거) : extension_dir = "ext" 3rd (주석 제거 구성 편집) : extension = C : /PHP/ext/php_mysql.dll extension = C : /PHP/ext/php_mysqli.dll
  2. IIS 서버를 다시 시작하십시오.
  3. mysql이 시스템에서 실행 중인지 확인하십시오.

php.ini 파일을로드하는 방법

  1. php.ini-production / php.ini-development 파일 중 하나의 이름을 C : \ PHP에서 php.ini로 변경하십시오 (이제 확장자는 "php.ini"가됩니다).
  2. php.ini 파일로 이름을 바꾼 후 서버를 다시 시작하십시오.
  3. http : //localhost/phpinfo.php 의 변경 사항을 참조하십시오 .

2

Docker를 사용하는 경우 ...

php-container RUN 내부 :

#docker-php-ext-install mysqli

#apachectl restart


1

나는 Namesco 서버를 사용하여 같은 문제를 가진 사람을 도울 수 있다고 생각했습니다. 홈 PC의 로컬 서버에서 namesco로 데이터베이스를 이동 한 후이 문제를 해결하려고했습니다. 그들은 그것이 코딩 문제라고 말한 것을 돕지 않을 것입니다.

  • 그러나 CPANEl LINUX 호스팅 인터페이스에서 수정하는 것은 간단했습니다.
  • php를 클릭하십시오.
  • 그런 다음 php 모듈을 클릭하고 사전 설치된 모듈 목록에서 mysqli 상자를 클릭하십시오.
  • 그런 다음 저장을 클릭하십시오. (다른 서버에서 작동했다면 코드를 변경할 필요가 없습니다.)

불행히도 그들의 지원 기사는 시간 낭비였습니다. 이것을 읽은 후 나는 새로운 결정으로 관리자 인터페이스로 갔다.


0

일부 배포판 (예 : Gentoo )은 여러 PHP 설치를 지원하며, mysqli가 설치되고 활성화 된 상태에서 하나를 사용하고 있는지 확인해야합니다.

젠투에서 새 PHP를 설치했지만 (mysqli USE 플래그가 활성화 된 상태에서) 새 버전의 PHP를 활성화해야했습니다 (이전 버전에는 mysqli가 없어야했기 때문입니다).

# eselect php list apache2
  [1]   php5.3 *
  [2]   php5.5
# eselect php set apache2 2
You have to run `/etc/init.d/apache2 restart' for the changes to take effect
# /etc/init.d/apache2 restart

0

위의 모든 사항을 확인했지만 작동하지 않았습니다.

내가 찾은 몇 가지 단계가 있습니다.

Ubuntu 14.04 에서 PHP 버전 5.5.9-1ubuntu4.17 을 사용했습니다.

먼저 폴더를 확인하십시오.

#ls /etc/php5/mods-available/
json.ini  mcrypt.ini  mysqli.ini  mysql.ini  mysqlnd.ini  opcache.ini  pdo.ini  pdo_mysql.ini  readline.ini  xcache.ini

mysqli.ini가 포함되어 있지 않으면 설치에 대한 다른 답변을 읽으십시오.

extension_dirphp.ini 찾기 열기

제 경우에는 설정해야합니다 extension_dir = /usr/lib/php5/20121212

그리고 apache2를 다시 시작하십시오. /ect/init.d/apache2 restart


0

PHP zip에는 일반적으로 사용되는 대부분의 확장 (php_mysqli.dll과 같은 Windows의 * .dll)이 \ ext 디렉토리에 포함되어 있지만 기본적으로 활성화되어 있지 않습니다. MySQLi를 사용하려고 할 때 다음과 같은 치명적인 오류가 발생할 수 있습니다.

( ! ) Fatal error: Uncaught Error: Class 'mysqli' not found in C:\myProject\ class.Database.php on line 24

확장 기능을 활성화하려면 php.ini를 열고 (먼저 php.ini-development를 php.ini로 복사해야 할 수 있음) 다음 두 줄의 주석 처리를 제거 (또는 추가)합니다.

extension_dir = "ext"

그리고 치명적인 오류가 발생하는 특정 확장 (예 : mysqli) :

extension=mysqli


0

PHP를 새로 설치 한 경우 php.ini에서 ;이전 extension_dir을 제거하십시오 .



0

docker를 사용하는 모든 사람에게이 문제가 발생하여 php : fpm 이미지 대신 고유 한 Dockerfile을 사용하여 문제를 해결했습니다.

FROM php:fpm

RUN docker-php-ext-install mysqli

0

오랜 분석 절차를 거쳐이 문제에 대한 해결책을 찾았습니다. 명령 줄 기능을 사용하여 내 PHP 설치를 제대로 테스트 한 후 PHP가 잘 작동하고 mysql 데이터베이스에서 작동 할 수 있음을 알았습니다. Btw. php -f filename.php 명령을 사용하여 php 코드로 코드 파일을 실행할 수 있습니다.
그래서 아파치에 문제가 있다는 것을 깨달았습니다.
phpinfo () 함수만으로 파일을 만들었습니다.
여기에서
Loaded Configuration File 줄에서
내 구성 파일이로드되지 않고 대신 언급 된 (없음)을 보았습니다 .

마지막으로 Apache 구성에서 항목을 찾았습니다.

<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

하지만 PHP 7을 설치했기 때문에 Apache가 php.ini 파일을로드 할 수 없었습니다. 해당 항목이 없기 때문입니다. 나는 추가했다

<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

Apache를 다시 시작한 후에는 모두 잘 작동합니다.

위의 코드 블록은 httpd-xampp.conf 파일에서 찾았습니다. 구성의 다른 곳에있을 수 있습니다.
동일한 파일에서 php 5 버전을 대체하기 위해 php 7에 대한 설정을 변경했습니다.

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadFile "C:/xampp/php/php7ts.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

보시다시피 xampp 패키지가 설치되어 있지만이 문제는 Apache쪽에 만 있습니다.



0

xampp를 사용하고 있으며 이름을 바꾸면 문제가 해결되었습니다.

extension_dir = "ext"

...에

extension_dir = "C:\xampp\php\ext"

추신 :이 변경 후 아파치를 다시 시작하는 것을 잊지 마십시오!


0

php.ini에서 :

extension_dir ="c:/wamp64/bin/php/php7.4.9/ext/"

PHP 버전이 올바른지 확인하십시오.


-1
<?php  /* If the error is due to calling mysqli in a class */

    class dbconnect extends mysqli{

        private $host = 'localhost';
        private $user = 'root';
        private $pass = '';
        private $db = 'test';

        public function __construct() {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);

            if (mysqli_connect_error()) {
                die('Connect Error (' . mysqli_connect_errno() . ') ' .
                    mysqli_connect_error());
            }
        }
    }
?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.