Cách giải quyết "Lỗi nghiêm trọng: Không tìm thấy lớp 'MySQLi'"?


92

Tôi đang làm một hướng dẫn và gặp lỗi này:

Lỗi nghiêm trọng: Không tìm thấy lớp 'MySQLi' (URL DÀI) trên dòng 8

Mã trên dòng 8 là:

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

Tôi thấy trên mạng có người nói rằng hãy xem liệu nó đã được bật trong phpinfo () của tôi hay không, nhưng không có bất kỳ thứ gì được liệt kê trong đó cho "mysqli".

Ngoài ra, tôi đang chạy phiên bản PHP 5.2.5


Bạn có thể sử dụng lớp MYSQLi viết tay , vì vậy bạn không cần cài đặt mysqli. Đó là giải pháp duy nhất nếu bạn không sở hữu máy chủ.

Câu trả lời:


83

Có vẻ như bạn chỉ cần cài đặt MySQLi .

Nếu bạn cho rằng mình đã làm điều đó mà vẫn gặp sự cố, vui lòng đăng hệ điều hành của bạn và bất kỳ thứ gì khác có thể giúp chẩn đoán thêm.


20
Trên AWS, bạn chỉ cần chạysudo yum install php-mysqli
bobobobo

Đối với tôi, nó đã được sửa bằng: apt-get install php7.0-mysql. Tôi đang chạy trên Raspbian Stretch 9
negrotico19

Trên AWS với linux amazon, nó sẽ là một cái gì đó giống như sudo yum install php56-mysqlnd.x86_64(chọn một trong những phù hợp với phiên bản php bạn đã cài đặt)
auspicious99

46

Bạn có thể kiểm tra xem thư viện mysqli có hiện diện hay không bằng cách thực thi mã này:

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

6
Tôi vẫn nhận được "Chúng tôi không có mysqli !!!" ngay cả sau khi chạy `sudo apt-get install php5-mysqlnd`?
Banned_User

Tôi nhận được thông báo 'Phù, chúng tôi có nó nhưng tôi vẫn gặp lỗi tương tự mà Lớp' msqli 'không được tìm thấy trong ... bất kỳ ý tưởng nào?
PA-GW

36

Nếu bạn đang sử dụng Ubuntu , hãy chạy:

 sudo apt-get install php5-mysqlnd

5
Và đừng quên khởi động lại Apache sau đó!
fracz

@fracz Khởi động lại Apache là phần tôi quên. Tôi chỉ khởi động lại MySQL. Cảm ơn.
James

Điều này là không đủ. Tôi vẫn thiếu gói php5-mysql. Sử dụng sudo apt-get -y install php5-mysql php5-mysqlndđể có được cả hai. Đó có phải là thứ bạn đang thiếu không, @Hermann Ingjaldsson?
Balmipour

đó là một số lỗi cấu hình. stackoverflow.com/questions/31535173/…
Fzs2

21

Nếu bạn đang gọi "mysqli mới (..)" từ bên trong một lớp có không gian tên, bạn có thể gặp lỗi tương tự Fatal error: Class 'foo\bar\mysqli' not found in. Cách để khắc phục điều này là đặt nó thành không gian tên gốc một cách rõ ràng với dấu gạch chéo ngược đứng trước như sau:

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

1
Đây là điều đầu tiên cần xem xét.
James Bailey

15

Ngoài việc bỏ ghi chú phần mở rộng php_mysqli.dll trong php.ini , cũng bỏ ghi chú chỉ thị extension_dir trong php.ini và chỉ định vị trí của bạn:

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

Điều này làm cho nó hoạt động cho tôi.


Nó làm việc cho tôi nhưng với ./extđó là con đường tương đối. Và tôi đã phải đổi tên php.ini-developmentthành php.inivà bỏ ghi chú trong tệp đó extension=php_mysqli.dll. Oh cậu bé, tôi không nhớ bạn PHP.
Overdrivr

Mẹo ở đây đối với tôi (trên Windows) là nhập đường dẫn tuyệt đối đến phần mở rộng dir trong "extension_dir".
TechNyquist


2

Cách bật mysqli trong php.ini

  1. Chỉnh sửa / bỏ ghi chú bằng cách xóa ';' (dấu hai chấm) cấu hình sau trong php.ini: 1st (bỏ ghi chú và thêm cấu hình): include_path = "C: \ php \ bao gồm" thứ 2 (bỏ ghi chú): extension_dir = "ext" thứ 3 (bỏ ghi chú và chỉnh sửa cấu hình): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Khởi động lại máy chủ IIS
  3. Đảm bảo rằng mysql đang chạy trên hệ thống.

Cách tải tệp php.ini

  1. Đổi tên bất kỳ tệp nào trong số tệp php.ini-production / php.ini-development thành php.ini từ C: \ PHP (lưu ý bây giờ phần mở rộng sẽ là ini tức là "php.ini").
  2. Sau khi đổi tên thành máy chủ khởi động lại tệp php.ini
  3. Xem các thay đổi trong http: //localhost/phpinfo.php

2

Nếu bạn đang sử dụng Docker ...

Bên trong php-container RUN:

#docker-php-ext-install mysqli

#apachectl restart

1
Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại bình luận bên dưới bài đăng của họ. - Từ đánh giá
Erwan

@Erwan nó, thực sự, có
Your Common Sense


1

Tôi nghĩ rằng tôi có thể giúp bất kỳ ai gặp vấn đề tương tự bằng cách sử dụng máy chủ Namesco. Tôi đã cố gắng khắc phục sự cố này sau khi di chuyển cơ sở dữ liệu từ máy chủ cục bộ của tôi trên máy tính gia đình sang tênco. Họ sẽ không hỗ trợ họ nói rằng đó là một vấn đề mã hóa.

  • Tuy nhiên, nó rất đơn giản để khắc phục từ giao diện lưu trữ CPANEl LINUX của họ.
  • Bấm vào php.
  • sau đó nhấp vào các mô-đun php và từ danh sách các mô-đun được cài đặt sẵn của chúng, chỉ cần nhấp vào hộp cho mysqli.
  • Sau đó bấm lưu. (Không cần thay đổi mã nếu (các) mã đó hoạt động trên một máy chủ khác.)

Thật không may, các bài báo hỗ trợ của họ đã lãng phí thời gian. Sau khi đọc xong, tôi vào giao diện quản trị với một quyết tâm mới.


0

Một số bản phân phối (chẳng hạn như Gentoo ) hỗ trợ nhiều bản cài đặt PHP và bạn phải đảm bảo rằng bạn đang sử dụng một bản cài đặt và kích hoạt mysqli.

Trên Gentoo, tôi đã cài đặt một PHP mới (với cờ SỬ DỤNG mysqli được bật), nhưng tôi cần phải kích hoạt phiên bản PHP mới (vì phiên bản cũ phải thiếu 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

Tôi đã kiểm tra tất cả ở trên và nó không hoạt động với tôi,

Có một số bước tôi đã tìm thấy.

Tôi đã sử dụng Phiên bản PHP 5.5.9-1ubuntu4.17 trên Ubuntu 14.04

Đầu tiên hãy kiểm tra thư mục

#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

Nếu nó không chứa mysqli.ini , hãy đọc câu trả lời khác để cài đặt nó,

Mở tiện íchphp.ini tìm kiếm

Trong trường hợp của tôi, tôi phải đặt extension_dir = /usr/lib/php5/20121212

Và khởi động lại apache2: /ect/init.d/apache2 restart


0

Zip PHP bao gồm hầu hết các phần mở rộng thường được sử dụng (* .dll trên các cửa sổ như php_mysqli.dll) trong thư mục \ ext, tuy nhiên chúng không được bật theo mặc định. Bạn có thể gặp phải Lỗi nghiêm trọng này khi cố gắng sử dụng MySQLi:

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

Để bật tiện ích mở rộng, hãy mở php.ini (trước tiên bạn có thể cần sao chép php.ini-development dưới dạng php.ini) và bỏ nhận xét (hoặc thêm) hai dòng sau:

extension_dir = "ext"

Và bất kỳ tiện ích mở rộng cụ thể nào bạn đang gặp phải Lỗi nghiêm trọng, tức là đối với mysqli:

extension=mysqli


0

Trên bản cài đặt mới của PHP, hãy xóa ;trước đó extension_dirtrong php.ini.



0

Đối với bất kỳ ai sử dụng docker, tôi đã gặp phải vấn đề này và giải quyết nó bằng cách sử dụng Dockerfile của riêng tôi thay vì hình ảnh php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

Tôi đã tìm ra giải pháp cho vấn đề này sau một quá trình phân tích dài. Sau khi kiểm tra đúng cách cài đặt php của tôi với các tính năng dòng lệnh, tôi phát hiện ra rằng php đang hoạt động tốt và có thể hoạt động với cơ sở dữ liệu mysql. Btw. bạn có thể chạy các tập tin mã bằng mã php bằng lệnh php -f filename.php
Vì vậy, tôi nhận ra, nó phải có gì đó sai với Apache.
Tôi đã tạo một tệp chỉ với hàm phpinfo () bên trong.
Ở đây tôi thấy, trong dòng
Tệp
cấu hình đã tải, tệp cấu hình của tôi không được tải, thay vào đó, nó được đề cập (không có).

Cuối cùng, tôi tìm thấy trong cấu hình Apache, mục nhập

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

Nhưng tôi đã cài đặt PHP 7 và do đó Apache không thể tải tệp php.ini vì không có mục nhập cho điều đó. Tôi đã thêm

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

và sau khi khởi động lại Apache đều hoạt động tốt.

Các khối mã này ở trên mà tôi tìm thấy trong tệp httpd-xampp.conf của mình. Có thể nó ở một nơi khác trong cấu hình của bạn.
Trong cùng một tệp, tôi đã thay đổi cài đặt cho php 7 trước khi thay thế cho phiên bản php 5.

#
# 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"

Như bạn có thể thấy, tôi đã cài đặt gói xampp nhưng vấn đề này chỉ xảy ra ở phía Apache.


0

cài đặt phần mở rộng phpXX-bằng PHP. Trong trường hợp FreeBSD của tôi:

pkg install php74-extensions

0

Tôi đang sử dụng xampp và sự cố của tôi đã được khắc phục khi tôi đổi tên:

extension_dir = "ext"

đến

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

Tái bút: Đừng quên khởi động lại apache sau khi thực hiện thay đổi này!


-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());
            }
        }
    }
?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.