Tiện ích mở rộng Mysqli cho PHP

Tôi đã viết một tập lệnh bằng PHP để truy cập cơ sở dữ liệu MySQL bằng hàm mysqli nhưng dịch vụ PHP sẽ không vượt quá lệnh gọi hàm mysqli. Tôi biết rằng dịch vụ PHP đang chạy, tôi gọi thông tin. trang php, điều đó cũng có nghĩa là Apache được cấu hình đúng

Trong video này, tôi sẽ trình bày cách bật chức năng mysqli của bạn trên máy chủ Apache chạy PHP

Tiện ích mở rộng MySQLi [MySQL được cải tiến] là trình điều khiển cơ sở dữ liệu được ngôn ngữ lập trình PHP sử dụng để cung cấp giao diện cho cơ sở dữ liệu MySQL. Hiện tại, có sẵn ba API chính nếu bạn yêu cầu chương trình của mình giao tiếp với máy chủ cơ sở dữ liệu MySQL;

Tại Bobcares, chúng tôi thường nhận được yêu cầu sửa lỗi thiếu tiện ích mở rộng MySQLi như một phần của Dịch vụ quản lý máy chủ của chúng tôi

Hôm nay, hãy phân tích lỗi và xem các Kỹ sư hỗ trợ của chúng tôi khắc phục lỗi đó cho khách hàng như thế nào

Phần mở rộng MySQLi thiếu lỗi phpMyAdmin là gì?

Trước khi tìm hiểu sâu hơn về lỗi, trước tiên, hãy hiểu tiện ích mở rộng MySQLi bị thiếu trong phpMyAdmin là gì?

Các hàm MySQLi cho phép chúng tôi truy cập các máy chủ cơ sở dữ liệu MySQL và đó là trình điều khiển cơ sở dữ liệu quan hệ được sử dụng trong ngôn ngữ kịch bản PHP. Nếu có phần mở rộng MySQLi, chúng tôi sẽ gặp lỗi này

Một lỗi mẫu tại PHPMyAdmin sẽ giống như

Làm cách nào chúng tôi sửa tiện ích mở rộng MySQLi bị thiếu phpMyAdmin?

Cho đến nay, chúng ta đã thấy tiện ích mở rộng MySQLi bị thiếu trong lỗi phpMyAdmin là gì. Giải pháp cho lỗi này là bật tiện ích mở rộng MySQLi trên máy chủ

Hãy xem các cách khác nhau mà Kỹ sư hỗ trợ của chúng tôi khắc phục lỗi này cho khách hàng bằng cách bật tiện ích mở rộng MySQLi

Bật tiện ích mở rộng MySQLi trong php. tập tin ini

Trước tiên, chúng tôi xác minh rằng tiện ích mở rộng trong các mô-đun PHP đã được bật hay chưa. Đối với điều này, chúng tôi chạy lệnh này

php -m | grep -i mysqli

Hãy để chúng tôi thảo luận về cách Kỹ sư hỗ trợ của chúng tôi kích hoạt tiện ích mở rộng MySQLi từ tệp php. ini trong Linux và Windows

Trong Linux

1. Đầu tiên, chúng tôi mở php. tập tin ini

extension=php_mysqli.so
0

2. Sau đó, chúng tôi tìm kiếm dòng bình luận

#extension=php_mysqli.so

3. Và, chúng tôi bỏ ghi chú dòng bằng cách xóa thẻ bắt đầu bằng # ngay từ đầu, chẳng hạn như

extension=php_mysqli.so

Cuối cùng, chúng tôi khởi động lại máy chủ web

Trong cửa sổ

1. Chúng tôi mở php. tập tin ini

2 Sau đó, chúng tôi tìm kiếm dòng nhận xét

#extension=php_mysqli.dll

3. Và, chúng tôi bỏ ghi chú dòng bằng cách xóa thẻ bắt đầu bằng # ngay từ đầu, chẳng hạn như

extension=php_mysqli.dll

Do đó, cho phép nó giải quyết lỗi

Kích hoạt MySQLi bằng EasyApache4

Cách đơn giản nhất để kích hoạt MySQLi là từ EasyApache. Hãy để chúng tôi thảo luận về cách Kỹ sư hỗ trợ của chúng tôi kích hoạt nó từ EasyApache

1. Đầu tiên, chúng tôi đăng nhập vào WHM với quyền root

2. Sau đó, chúng tôi tìm kiếm “EasyApache4” hoặc vào Phần mềm > EasyApache4

3. Ở trên cùng, hãy tìm “Gói đã cài đặt hiện tại” và chúng tôi nhấp vào nút “Tùy chỉnh”

4. Sau đó, trên phần bảng điều khiển bên trái, chúng tôi nhấp vào “Tiện ích mở rộng PHP”

5. Sau đó, chúng tôi tìm kiếm mysqlnd

6. Chúng tôi thấy một cái gì đó giống như “php70-php-mysqlnd” [tùy thuộc vào phiên bản PHP]. Chúng tôi kích hoạt nó

7. Nhấp vào Xem lại và nhấp vào nút Cung cấp

Kích hoạt tiện ích mở rộng MySQLi trên máy chủ web mà không cần bất kỳ bảng điều khiển nào

Các kỹ sư hỗ trợ của chúng tôi cũng cung cấp giải pháp cho những khách hàng không sử dụng bất kỳ bảng nào. Để bật tiện ích mở rộng MySQLi trong máy chủ không có bảng điều khiển. Chúng tôi chạy lệnh dưới đây, chẳng hạn như

# ./configure --with-mysql=/usr --with-mysqli=/usr/bin/mysql_config

Sau đó, chúng tôi kiểm tra tiện ích mở rộng MySQLi được bật trên máy chủ

Sự kết luận

Tóm lại Lỗi chủ yếu là do thiếu MySQLi extension trong php. tập tin ini. Hôm nay, chúng tôi đã xem cách Kỹ sư hỗ trợ của chúng tôi giải quyết lỗi thiếu tiện ích MySQLi trên PHPMyAdmin và các cách khác nhau để bật tiện ích MySQLi

Tiện ích mở rộng MySQLi [MySQL được cải tiến] là trình điều khiển cơ sở dữ liệu quan hệ được sử dụng trong ngôn ngữ kịch bản PHP để cung cấp giao diện với cơ sở dữ liệu MySQL

Có ba tùy chọn API chính khi xem xét kết nối với máy chủ cơ sở dữ liệu MySQL

  • Phần mở rộng MySQL của PHP
  • Phần mở rộng MySQLi của PHP
  • Đối tượng dữ liệu PHP [PDO]

Mã PHP bao gồm một lõi, với các phần mở rộng tùy chọn cho chức năng cốt lõi. Các phần mở rộng liên quan đến MySQL của PHP, chẳng hạn như phần mở rộng MySQLi và phần mở rộng MySQL, được triển khai bằng cách sử dụng khung mở rộng PHP. Tiện ích mở rộng thường hiển thị API cho nhà phát triển PHP, để cho phép các tiện ích của nó được sử dụng theo chương trình. Tuy nhiên, một số tiện ích mở rộng sử dụng khung tiện ích mở rộng PHP không hiển thị API cho nhà phát triển PHP

Ví dụ: phần mở rộng trình điều khiển PDO MySQL không hiển thị API cho nhà phát triển PHP, nhưng cung cấp giao diện cho lớp PDO phía trên nó

MySQLi là phiên bản cải tiến của trình điều khiển PHP MySQL cũ hơn, mang lại nhiều lợi ích khác nhau. [1]

Các tác giả của ngôn ngữ kịch bản PHP khuyên bạn nên sử dụng MySQLi khi xử lý máy chủ MySQL phiên bản 4. 1. 3 và mới hơn [tận dụng chức năng mới]. [1]

Chi tiết kỹ thuật[sửa]

Tiện ích mở rộng MySQLi cung cấp nhiều lợi ích khác nhau so với phiên bản tiền nhiệm của nó, trong đó nổi bật nhất [theo trang web PHP[1]] là

  • Giao diện hướng đối tượng
  • Hỗ trợ cho báo cáo chuẩn bị
  • Hỗ trợ cho nhiều câu lệnh
  • Hỗ trợ giao dịch
  • Hỗ trợ sửa lỗi nâng cao

So sánh các tính năng [1][sửa]

Phần mở rộng MySQLi của PHPPhiên bản PHP Phần mở rộng MySQL của PHP được giới thiệu5. 05. 0pre-3. 0Được bao gồm trong PHP 5. xYesYesYesĐược bao gồm trong PHP 7. xYesYesNoTrạng thái phát triểnĐang phát triểnĐang phát triển kể từ PHP 5. 3Không dùng nữa kể từ PHP 5. 5
Đã xóa trong PHP 7. 0Được MySQL đề xuất cho các dự án mớiCó - tùy chọn ưu tiênCóKhôngAPI hỗ trợ Bộ ký tựCóCóKhôngAPI hỗ trợ các câu lệnh đã chuẩn bị phía máy chủCóCóKhôngAPI hỗ trợ các câu lệnh đã chuẩn bị phía máy kháchKhôngCóKhôngAPI hỗ trợ các thủ tục được lưu trữCóCóKhôngAPI hỗ trợ nhiều câu lệnhCóHầu hếtKhôngHỗ trợ tất cả MySQL 4. 1+ chức năngCóHầu hếtKhông

Giao diện kép[sửa]

Tiện ích mở rộng MySQLi có giao diện kép - nó hỗ trợ cả mô hình lập trình hướng đối tượng và thủ tục

Người dùng di chuyển từ tiện ích mở rộng MySQL cũ có thể thích giao diện thủ tục hơn. Giao diện thủ tục tương tự như giao diện của phần mở rộng MySQL cũ. Trong nhiều trường hợp, tên hàm chỉ khác nhau bởi tiền tố. Một số hàm MySQLi lấy điều khiển kết nối làm đối số đầu tiên của chúng, trong khi các hàm khớp trong giao diện MySQL cũ lấy nó làm đối số cuối cùng tùy chọn

Các lệnh gọi hàm gốc mới và cũ

Kết nối[sửa]

Máy chủ MySQL hỗ trợ sử dụng các lớp vận chuyển khác nhau cho các kết nối. Các kết nối sử dụng TCP/IP, ổ cắm tên miền Unix hoặc đường ống có tên Windows

Tên máy chủ

connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli["127.0.0.1", "user", "password", "database", 3306];
if [$mysqli->connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
2 có một ý nghĩa đặc biệt. Nó bị ràng buộc với việc sử dụng ổ cắm tên miền Unix. Không thể mở kết nối TCP/IP bằng tên máy chủ
connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli["127.0.0.1", "user", "password", "database", 3306];
if [$mysqli->connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
2, thay vào đó bạn phải sử dụng
connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli["127.0.0.1", "user", "password", "database", 3306];
if [$mysqli->connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
4

Thí dụ. Ý nghĩa đặc biệt của localhost

connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli["127.0.0.1", "user", "password", "database", 3306];
if [$mysqli->connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>

đầu ra

#extension=php_mysqli.so
1

Các tuyên bố thực thi[sửa]

Các câu lệnh có thể được thực thi với các hàm mysqli_query[], mysqli_real_query[] và mysqli_multi_query[]. Hàm mysqli_query[] là phổ biến nhất và kết hợp câu lệnh thực thi với tìm nạp vào bộ đệm tập kết quả của nó, nếu có, trong một lệnh gọi. Gọi mysqli_query[] giống như gọi mysqli_real_query[] theo sau là mysqli_store_result[]

Thí dụ. Kết nối với MySQL

#extension=php_mysqli.so
2

Bộ đệm kết quả

Sau khi kết quả thực hiện câu lệnh có thể được truy xuất ngay lập tức để được lưu vào bộ đệm của máy khách hoặc bằng cách đọc từng hàng. Bộ đệm tập kết quả phía máy khách cho phép máy chủ giải phóng tài nguyên được liên kết với kết quả câu lệnh càng sớm càng tốt. Nói chung, khách hàng là tập hợp kết quả tiêu thụ chậm. Do đó, nên sử dụng bộ kết quả đệm. mysqli_query[] kết hợp thực thi câu lệnh và bộ đệm tập kết quả

Các ứng dụng PHP có thể điều hướng tự do thông qua các kết quả được đệm. Điều hướng nhanh vì tập hợp kết quả được giữ trong bộ nhớ máy khách. Xin lưu ý rằng việc mở rộng quy mô theo máy khách thường dễ dàng hơn là mở rộng quy mô máy chủ

Thí dụ. Điều hướng qua các kết quả được đệm

#extension=php_mysqli.so
3

Ví dụ trên sẽ xuất ra

#extension=php_mysqli.so
4

Tập hợp kết quả không có bộ đệm

Nếu bộ nhớ máy khách là một tài nguyên ngắn và không cần giải phóng tài nguyên máy chủ càng sớm càng tốt để giữ cho máy chủ tải ở mức thấp, thì có thể sử dụng các kết quả không có bộ đệm. Không thể cuộn qua các kết quả không có bộ đệm trước khi tất cả các hàng đã được đọc

Thí dụ. Điều hướng qua các kết quả không có bộ đệm

#extension=php_mysqli.so
5

Loại dữ liệu giá trị tập hợp kết quả

Các hàm mysqli_query[], mysqli_real_query[] và mysqli_multi_query[] được sử dụng để thực thi các câu lệnh không chuẩn bị trước. Ở cấp độ của Giao thức máy chủ máy khách MySQL, lệnh COM_QUERY và giao thức văn bản được sử dụng để thực thi câu lệnh. Với giao thức văn bản, máy chủ MySQL chuyển đổi tất cả dữ liệu của tập kết quả thành chuỗi trước khi gửi. Chuyển đổi này được thực hiện bất kể kiểu dữ liệu cột tập hợp kết quả SQL. Các thư viện máy khách MySQL nhận tất cả các giá trị cột dưới dạng chuỗi. Không có quá trình truyền phía máy khách nào được thực hiện để chuyển đổi các cột trở lại kiểu gốc của chúng. Thay vào đó, tất cả các giá trị được cung cấp dưới dạng chuỗi PHP

Thí dụ. Giao thức văn bản trả về chuỗi theo mặc định

#extension=php_mysqli.so
6

Ví dụ trên sẽ xuất ra

#extension=php_mysqli.so
7

Có thể chuyển đổi các cột số nguyên và số float trở lại số PHP bằng cách đặt tùy chọn kết nối MYSQLI_OPT_INT_AND_FLOAT_NATIVE, nếu sử dụng thư viện mysqlnd. Nếu được đặt, thư viện mysqlnd sẽ kiểm tra các loại cột siêu dữ liệu của tập kết quả và chuyển đổi các cột SQL dạng số thành số PHP, nếu phạm vi giá trị của loại dữ liệu PHP cho phép. Bằng cách này, ví dụ, các cột SQL INT được trả về dưới dạng số nguyên

Thí dụ. Các kiểu dữ liệu gốc với mysqlnd và tùy chọn kết nối

#extension=php_mysqli.so
8

Ví dụ trên sẽ xuất ra

connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli["127.0.0.1", "user", "password", "database", 3306];
if [$mysqli->connect_errno] {
    echo "Failed to connect to MySQL: [" . $mysqli->connect_errno . "] " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";
?>
0

Báo cáo chuẩn bị [ chỉnh sửa ]

Cơ sở dữ liệu MySQL hỗ trợ các câu lệnh đã chuẩn bị. Một câu lệnh đã chuẩn bị hoặc một câu lệnh được tham số hóa được sử dụng để thực hiện lặp đi lặp lại cùng một câu lệnh với hiệu quả cao

quy trình làm việc cơ bản

Việc thực hiện câu lệnh chuẩn bị bao gồm hai giai đoạn. chuẩn bị và thực hiện. Ở giai đoạn chuẩn bị, một mẫu câu lệnh được gửi đến máy chủ cơ sở dữ liệu. Máy chủ thực hiện kiểm tra cú pháp và khởi tạo tài nguyên nội bộ của máy chủ để sử dụng sau này

Máy chủ MySQL hỗ trợ sử dụng trình giữ chỗ ẩn danh, có vị trí với ?

Xem ví dụ trong. [3]

Các thủ tục được lưu trữ [4][sửa]

Cơ sở dữ liệu MySQL hỗ trợ thủ tục lưu sẵn. Một thủ tục được lưu trữ là một chương trình con được lưu trữ trong danh mục cơ sở dữ liệu. Các ứng dụng có thể gọi và thực thi thủ tục lưu sẵn. Câu lệnh CALL SQL được sử dụng để thực thi thủ tục lưu sẵn

Tham số

Các thủ tục được lưu trữ có thể có các tham số IN, INOUT và OUT, tùy thuộc vào phiên bản MySQL. Giao diện MySQLi không có khái niệm đặc biệt cho các loại tham số khác nhau

tham số TRONG

Tham số đầu vào được cung cấp với câu lệnh CALL. Vui lòng đảm bảo các giá trị được thoát chính xác

Xem các ví dụ trong. [4]

Nhiều câu [5][sửa]

MySQL tùy chọn cho phép có nhiều câu lệnh trong một chuỗi câu lệnh. Gửi nhiều câu lệnh cùng một lúc làm giảm các chuyến đi khứ hồi giữa máy khách và máy chủ nhưng yêu cầu xử lý đặc biệt

Nhiều câu lệnh hoặc nhiều truy vấn phải được thực thi với mysqli_multi_query[]. Các câu lệnh riêng lẻ của chuỗi câu lệnh được phân tách bằng dấu chấm phẩy. Sau đó, tất cả các tập kết quả được trả về bởi các câu lệnh đã thực hiện phải được tìm nạp

Máy chủ MySQL cho phép có các câu lệnh trả về tập kết quả và câu lệnh không trả về tập kết quả trong một câu lệnh nhiều lần

Xem các ví dụ trong [5]

Hỗ trợ API cho giao dịch [6][sửa]

Máy chủ MySQL hỗ trợ các giao dịch tùy thuộc vào công cụ lưu trữ được sử dụng. Kể từ MySQL 5. 5, công cụ lưu trữ mặc định là InnoDB. InnoDB có hỗ trợ giao dịch ACID đầy đủ

Giao dịch có thể được kiểm soát bằng lệnh gọi SQL hoặc API. Bạn nên sử dụng lệnh gọi API để bật và tắt chế độ tự động cam kết cũng như để cam kết và khôi phục các giao dịch

Ví dụ ở đây. [6]

Tập kết quả MySQL chứa siêu dữ liệu. Siêu dữ liệu mô tả các cột được tìm thấy trong tập hợp kết quả. Tất cả siêu dữ liệu được gửi bởi MySQL đều có thể truy cập thông qua giao diện MySQLi. Tiện ích mở rộng không thực hiện hoặc thay đổi không đáng kể đối với thông tin mà nó nhận được. Sự khác biệt giữa các phiên bản máy chủ MySQL không được căn chỉnh

Dữ liệu meta được truy cập thông qua giao diện mysqli_result

Xem thêm tại đây. [7]

Phần mở rộng MySQLi và các kết nối liên tục [1][sửa]

Hỗ trợ kết nối liên tục đã được giới thiệu trong PHP 5. 3 cho phần mở rộng MySQLi. Hỗ trợ đã có trong PDO MYSQL và ext/mysql. Ý tưởng đằng sau các kết nối liên tục là kết nối giữa quy trình máy khách và cơ sở dữ liệu có thể được sử dụng lại bởi quy trình máy khách, thay vì được tạo và hủy nhiều lần. Điều này làm giảm chi phí tạo kết nối mới mỗi khi cần một kết nối, vì các kết nối không sử dụng được lưu vào bộ đệm và sẵn sàng để sử dụng lại

Không giống như phần mở rộng MySQL, MySQLi không cung cấp chức năng riêng để mở các kết nối liên tục. Để mở một kết nối liên tục, bạn phải thêm p. đến tên máy chủ khi kết nối

Vấn đề với các kết nối liên tục là chúng có thể bị khách hàng bỏ lại ở trạng thái không thể đoán trước. Ví dụ: khóa bảng có thể được kích hoạt trước khi máy khách kết thúc đột ngột. Một quy trình máy khách mới sử dụng lại kết nối liên tục này sẽ nhận được kết nối "nguyên trạng". Bất kỳ quá trình dọn dẹp nào cũng cần phải được thực hiện bởi quy trình máy khách mới trước khi nó có thể tận dụng tốt kết nối liên tục, làm tăng gánh nặng cho lập trình viên

Tuy nhiên, kết nối liên tục của tiện ích mở rộng MySQLi cung cấp mã xử lý dọn dẹp tích hợp. Việc dọn dẹp được thực hiện bởi MySQLi bao gồm

  • Phục hồi các giao dịch đang hoạt động
  • Đóng và thả các bảng tạm thời
  • Mở khóa các bảng
  • Đặt lại các biến phiên
  • Đóng các câu lệnh đã chuẩn bị sẵn [luôn xảy ra với PHP]
  • Đóng xử lý
  • Phát hành khóa thu được với GET_LOCK[]

Điều này đảm bảo rằng các kết nối liên tục ở trạng thái sạch khi được trả về từ nhóm kết nối, trước khi quy trình máy khách sử dụng chúng

Tiện ích mở rộng MySQLi thực hiện việc dọn dẹp này bằng cách tự động gọi hàm C-API mysql_change_user[]

Tính năng dọn dẹp tự động có những ưu điểm và nhược điểm. Ưu điểm là nhà phát triển không còn phải lo lắng về việc thêm mã dọn dẹp vì nó được gọi tự động. Tuy nhiên, nhược điểm là mã có thể chậm hơn một chút, vì mã để thực hiện dọn dẹp cần chạy mỗi khi kết nối được trả về từ nhóm kết nối

Có thể tắt mã dọn dẹp tự động bằng cách biên dịch PHP với MYSQLI_NO_CHANGE_USER_ON_PCONNECT được xác định

Làm cách nào để thêm phần mở rộng mysqli vào PHP?

Mở php của bạn. ini file [file cấu hình php] bên trong thư mục PHP của bạn [hoặc thư mục windows]. Tìm kiếm mysqli và bật dll bằng cách xóa ; . Bạn có thể phải khởi động lại hệ thống của mình. . You may have to re-boot your system.

Làm cách nào để bật tiện ích mở rộng mysqli trong PHP 7?

Đối với tất cả người dùng docker, chỉ cần chạy docker-php-ext-install mysqli từ bên trong bộ chứa php của bạn .

Làm cách nào để cài đặt tiện ích mở rộng mysqli cho PHP trên windows?

Cài đặt MySQL trên Windows . exe download the installer package, unzip it anywhere, and run setup.exe . Thiết lập trình cài đặt mặc định. exe sẽ hướng dẫn bạn qua quy trình đơn giản và theo mặc định sẽ cài đặt mọi thứ trong C. \mysql.

Làm cách nào để nhập mysqli trong PHP?

php $response = array[]; . '/db_connect. php';

Chủ Đề