Lỗi nghiêm trọng: lỗi chưa được phát hiện: không tìm thấy lớp mysqli_connect

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về lỗi không bắt được “Uncaught error. Gọi hàm không xác định mysql_connect()”

Lỗi này xảy ra khi chúng tôi cố gắng sử dụng các hàm “mysql_connect()” của php5 trong php7

PHP Lỗi nghiêm trọng. Lỗi chưa xử lý. Gọi đến hàm không xác định mysql_connect() lỗi được tăng vì các hàm mysql_* đã bị xóa hoàn toàn khỏi PHP 7, trước đây nó không được dùng trong PHP 5. 5, nhưng bây giờ nó đã bị xóa hoàn toàn

Chức năng MySQL cũ hơn bị xóa vì những lý do sau

  1. Không làm việc trên khái niệm Hướng đối tượng
  2. Không hỗ trợ các giao dịch và báo cáo đã chuẩn bị
  3. không an toàn

Cách khắc phục lỗi Undefined Function Mysql_connect()

Có bốn phương pháp để sửa lỗi hàm Mysql_connect() không xác định

  • Sử dụng MySQLi hoặc PDO
  • Kết nối với Mysql với đối tượng Pdo khá đơn giản
  • Kết nối với MySQL bằng đối tượng kết nối MySqli
  • Quay trở lại PHP 5 cũ hơn, cập nhật mã của bạn lên mysqli hoặc PDO rồi nâng cấp lên PHP7

1. Sử dụng MySQLi hoặc PDO

mysqli_connect()

Thay vì sử dụng “mysql_connect()” chúng ta nên sử dụng “mysqli_connect()” trong php7 để tránh lỗi này

Ví dụ. $mysql = new mysqli("localhost","root","password",''DB_name");

PDO (đối tượng cơ sở dữ liệu php)

Ví dụ. $pdo = PDO mới('mysql. host=localhost;dbname=database_name ', 'tên người dùng', 'mật khẩu');

// pdo yêu cầu cơ sở dữ liệu hợp lệ để thiết lập kết nối. Nếu cơ sở dữ liệu không được chỉ định thì nó sẽ đưa ra một ngoại lệ

2. Kết nối với Mysql với đối tượng Pdo khá đơn giản

$user = 'root'; // Mysql
User$password = ''; // Mysql Password
$server = 'localhost'; // Mysql Host
$database = 'my_database'; // Mysql Databse
// PDO Connection string
$pdo = new PDO("mysql:host=$server;dbname=$database", $user, $password);

3. Kết nối với MySQL bằng đối tượng kết nối MySqli

$con = mysqli_connect('localhost', 'username', 'password', 'database');

4. Quay trở lại PHP 5 cũ hơn, cập nhật mã của bạn lên mysqli hoặc PDO rồi nâng cấp lên PHP7

Thực hành tốt nhất

Sử dụng trình bao bọc MySQLi và trình ánh xạ đối tượng với các câu lệnh đã chuẩn bị

Ví dụ. Người dùng PHP-MySQLi-Database-Class https. //github. com/ThingEngineer/PHP-MySQLi-Database-Class

Bằng cách sử dụng MySQLi với câu lệnh chuẩn bị sẽ bảo mật kết nối cơ sở dữ liệu của bạn  & trong tương lai, nếu cần nâng cấp Cơ sở dữ liệu của bạn lên một số phiên bản khác, bạn sẽ không phải cập nhật tất cả chuỗi kết nối mysql của mình trong tất cả các trang

Tôi đã từng thấy một cách nghiêm túc khi kết nối cơ sở dữ liệu PHP

$con = mysqli_connect('localhost', 'username', 'password', 'database');
3 hoạt động hoàn toàn tốt trong nhiều tháng hoặc nhiều năm, rồi đột nhiên nó ngừng hoạt động. Khi bật báo cáo lỗi PHP hoặc khi kiểm tra lỗi trong tệp error_log trong cPanel, bạn sẽ thấy lỗi bên dưới

PHP Lỗi nghiêm trọng. Lỗi chưa xử lý. Gọi hàm không xác định mysqli_connect() trong /home/username/public_html/

Điều này có thể tạo ra sự bất tiện lớn và ảnh hưởng tiêu cực đến trang web dựa trên cơ sở dữ liệu của bạn, đặc biệt nếu bạn không truy cập trang web thường xuyên

Như bạn có thể thấy từ lỗi trên, PHP không nhận ra hàm

$con = mysqli_connect('localhost', 'username', 'password', 'database');
3. Điều này thường xảy ra khi một số thay đổi được thực hiện trên máy chủ ảnh hưởng đến tiện ích mở rộng mysqli

Có 2 cách kết nối PHP với cơ sở dữ liệu MySQL

  • phần mở rộng mysqli
  • Phần mở rộng PDO (Đối tượng dữ liệu PHP)

Các phiên bản trước của PHP (trước phiên bản 5) đã sử dụng tiện ích mở rộng MySQL không được dùng nữa vào năm 2012 và được thay thế bằng tiện ích mở rộng MySQLi. Chữ "i" trong MySQLi là viết tắt của cải tiến

Tiện ích mở rộng MySQLi hỗ trợ cả hai cách kết nối theo thủ tục và hướng đối tượng với cơ sở dữ liệu

cách thủ tục

$conn = mysqli_connect("hostname", "username", "password", "database");

Cách hướng đối tượng

$conn = new mysqli("hostname", "username", "password", "database");

Tất cả những gì bạn phải làm là thay thế các giá trị trong dấu ngoặc kép ở trên bằng thông tin đăng nhập cơ sở dữ liệu thực của bạn, trong đó tên máy chủ trong hầu hết các trường hợp sẽ là "Localhost", mặc dù tên này có thể khác trong một số trường hợp. "Tên người dùng" là tên người dùng của người dùng được gán cho cơ sở dữ liệu, "mật khẩu" là mật khẩu của người dùng đó và "cơ sở dữ liệu" là tên của cơ sở dữ liệu bạn đang kết nối với

Một trong các phương pháp trên sẽ cho phép giao tiếp giữa PHP và máy chủ cơ sở dữ liệu MySQL diễn ra

Khi xảy ra lỗi trên, điều đầu tiên bạn nên làm là kiểm tra xem mô-đun mở rộng PHP MySQL có đang được tải hay không

Để làm như vậy, chỉ cần lặp lại chức năng

$con = mysqli_connect('localhost', 'username', 'password', 'database');
5. Nó sẽ hiển thị cho bạn tất cả thông tin về phiên bản PHP đã cài đặt của bạn


Trên trang thông tin PHP, cuộn xuống phần có tiêu đề "mysqli". Bạn sẽ có thể thấy thư viện MySQLi đã bật trong hàng Phiên bản thư viện API ứng dụng khách như được hiển thị bên dưới

phpinfo() mysqli information

Có hai thư viện để kết nối PHP với cơ sở dữ liệu MySQL

  • Trình điều khiển riêng của MySQL cho PHP (
    $conn = new mysqli("hostname", "username", "password", "database");
    0)
  • Thư viện máy khách MySQL (
    $conn = new mysqli("hostname", "username", "password", "database");
    1)

Các tiện ích mở rộng (mysqli hoặc PDO_MySQL) có thể sử dụng thư viện mysqlnd hoặc libmysql để kết nối từ PHP sang MySQL

Thư viện máy khách MySQL là thư viện máy khách có mục đích chung, có nghĩa là nó có thể được sử dụng trên các ngôn ngữ khác nhau. Mặt khác, thư viện mysqlnd được tối ưu hóa cao và tích hợp chặt chẽ vào PHP. Thư viện mysqlnd là thư viện mặc định cho PHP 5. 4 và các phiên bản mới hơn. MySQL khuyên bạn nên sử dụng trình điều khiển riêng của MySQL cho PHP (mysqlnd) cùng với ext/mysqli hoặc PDO_MySQL

Trong trường hợp của chúng tôi từ ảnh chụp màn hình ở trên, bạn có thể thấy rằng mysqlnd là trình điều khiển được kích hoạt

Bây giờ chúng ta có thể cuộn thêm xuống phần có tiêu đề "mysqlnd" để biết thêm thông tin như trong ảnh chụp màn hình bên dưới

mysqlnd information in phpinfo()

Từ hàng cuối cùng (Tiện ích mở rộng API) của bảng trên, bạn có thể thấy rằng cả tiện ích mở rộng

$conn = new mysqli("hostname", "username", "password", "database");
2 và
$conn = new mysqli("hostname", "username", "password", "database");
3 đều được bật. Bằng cách này, kết nối cơ sở dữ liệu hoạt động hoàn hảo không có lỗi

Trong trường hợp kết nối cơ sở dữ liệu dẫn đến lỗi chức năng mysqli_connect() không xác định, thì bạn sẽ thấy rằng trang phpinfo() không có phần "mysqli" và "mysqlnd"

Các giải pháp cho lỗi hàm mysqli_connect() không xác định

1. Nâng cấp lên phiên bản PHP mới hơn

Trong hầu hết các trường hợp điều này đã xảy ra, tôi thấy rằng việc thay đổi PHP sang phiên bản mới hơn luôn hoạt động và khắc phục sự cố. Giả sử phiên bản PHP hiện tại của bạn là 7. 0, bạn có thể đổi sang phiên bản PHP mới hơn, chẳng hạn như PHP 7. 4 hoặc 8. 0

Điều này đã tự khắc phục sự cố cho tôi vào lần cuối cùng nó xảy ra với một trong những trang web tôi quản lý

Dưới đây là hướng dẫn ngắn gọn về cách kiểm tra phiên bản PHP trang web của bạn -> 3 Cách đơn giản để kiểm tra phiên bản PHP trang web của bạn

Và đây là hướng dẫn nâng cấp phiên bản PHP đơn giản -> Cách thay đổi phiên bản PHP trong cPanel

2. Thay đổi mysqli_connect thành mysqli mới

Hãy thử thay đổi kết nối cơ sở dữ liệu của bạn từ thủ tục sang OOP, tức là. thay đổi thay thế mysqli_connect thành mysqli mới. Mặc dù đó là cách OOP, nhưng điều đó không có nghĩa là bạn sẽ phải thay đổi bất kỳ thứ gì khác trong mã PHP của mình. Tôi đã thấy nó một cách nghiêm túc khi thực hiện thay đổi này đã sửa lỗi

3. Cài đặt phần mở rộng PHP MySQL

Nếu bạn tự lưu trữ trang web, bạn chỉ cần cài đặt tiện ích mở rộng php-mysqli trên Ubuntu bằng cách sử dụng lệnh bên dưới

sudo apt install php-mysqli

Sau đó, bạn sẽ được yêu cầu khởi động lại máy chủ apache bằng lệnh bên dưới để nó có hiệu lực

$con = mysqli_connect('localhost', 'username', 'password', 'database');
0

4. Thêm hoặc bỏ ghi chú dòng "extension=php_mysql. dll" trong php. tập tin ini

Nếu bạn tự host máy chủ, hãy mở php. ini và xóa dấu chấm phẩy trước dòng bên dưới

$con = mysqli_connect('localhost', 'username', 'password', 'database');
1

Vì vậy, nó sẽ giống như dưới đây

$con = mysqli_connect('localhost', 'username', 'password', 'database');
2

Nếu dòng này không tồn tại, chỉ cần thêm nó. Sau khi thực hiện các thay đổi, hãy lưu và khởi động lại máy chủ Apache của bạn

Nếu trang web của bạn được lưu trữ bởi một công ty/nhà cung cấp dịch vụ lưu trữ và việc nâng cấp lên phiên bản PHP mới hơn hoặc thay đổi mysqli_connect thành mysqli mới dường như không hiệu quả với bạn, chỉ cần liên hệ với máy chủ lưu trữ thông báo lỗi và họ sẽ khắc phục sự cố đó cho bạn

Làm cách nào để sửa cuộc gọi đến chức năng không xác định mysqli_ connect()?

Có bốn phương pháp để sửa lỗi hàm Mysql_connect() không xác định. .
Sử dụng MySQLi hoặc PDO
Kết nối với Mysql với đối tượng Pdo khá đơn giản
Kết nối với MySQL bằng đối tượng kết nối MySqli
Quay trở lại PHP 5 cũ hơn, cập nhật mã của bạn lên mysqli hoặc PDO rồi nâng cấp lên PHP7

Hàm Mysqli_connect() là gì?

Hàm mysqli_connect() cố gắng mở một kết nối đến Máy chủ MySQL chạy trên máy chủ có thể là tên máy chủ hoặc địa chỉ IP. Passing the NULL value or the string "localhost" to this parameter, the local host is assumed.

Sự khác biệt giữa Mysql_connect và Mysqli_connect là gì?

Có một số khác biệt quan trọng giữa hai thư viện. Mysqli hỗ trợ bộ ký tự, mysql thì không . Mysqli hỗ trợ các câu lệnh đã chuẩn bị, mysql thì không. Mysql không hỗ trợ nhiều câu lệnh, mysqli thì có.