WordPress 4.8.1 sử dụng mysql_connect không hoạt động với PHP 7


9

Tôi chỉ nâng cấp lên PHP 7 để thấy rằng WordPress 4.8.1 (phiên bản mới nhất) vẫn sử dụng mysql_connect trong mô-đun wp-db.php, nhưng mysql_connect đã không được dùng nữa.

Đoạn mã sau được lấy từ wp-db-php, dòng 1567-1571:

if ( WP_DEBUG ) {
    $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
} else {
    $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this>dbpassword,
                                 $new_link, $client_flags);
}

Đây là đầu ra khi tôi cố chạy chương trình của mình:

Lỗi nghiêm trọng: Lỗi chưa được xử lý: Gọi đến hàm không xác định mysql_connect () trong D: \ ApacheHtdocs \ ConneXions \ wp-gồm \ wp-db.php: 1570 Theo
dõi ngăn xếp:
# 0 D: \ ApacheHtdocs \ ConneXions \ wp-gồm \ wp- db.php (658): wpdb-> db_connect ()
# 1 D: \ ApacheHtdocs \ ConneXions \ wp-gồm \ load.php (404): wpdb -> __ construc ('root', '', 'Connexions', ' localhost ')
# 2 D: \ ApacheHtdocs \ ConneXions \ wp-settings.php (106): allow_wp_db ()
# 3 D: \ ApacheHtdocs \ ConneXions \ wp-config.php (104): allow_once (' D: \ ApacheHtdocs. .. ')
# 4 D: \ ApacheHtdocs \ ConneXions \ wp-load.php (37): allow_once (' D: \ ApacheHtdocs ... ')
# 5 D: \ ApacheHtdocs \ ConneXions \ wp-blog-header.php (13): request_once ('D: \ ApacheHtdocs ...')
# 6 D: \ ApacheHtdocs \ ConneXions \ index.php (17): yêu cầu ('D: \ ApacheHtdocs ...')
# 7 {main} được ném vào D: \ ApacheHtdocs \ ConneXions \ wp-gồm \ wp-db. php trên dòng 1570

Tôi không thể tin rằng WordPress nói rằng nó khuyên dùng PHP 7, nhưng nó không hoạt động với nó. Tôi đang thiếu gì ở đây?


2
mysql_connectchỉ được sử dụng như một dự phòng khi mysqlikhông được phát hiện. Có vẻ như bạn chưa mysqlihoặc mysqlđã cài đặt ( mysqliđược khuyến nghị, mysqlkhông được dùng nữa)
Tom J Nowell

Câu trả lời:


9

Điều này có vẻ như bạn chưa cài đặt mysqli và / hoặc kích hoạt trên máy chủ của bạn. IIRC mysqliđã được thêm vào php trong phiên bản 5.5 và mysqlphần mở rộng cũ hơn đã bị từ chối và hoàn toàn nghỉ hưu kể từ đó. Nếu bạn đã nâng cấp từ phiên bản PHP rất cũ, có thể bạn vẫn cần thêm bước kích hoạt mysqli.

(wordpress kiểm tra sự tồn tại của mysqlivà chỉ khi nó không tồn tại thử các mysqlchức năng cũ hơn .)


mysql là một phần của PHP trong các phiên bản 4 & 5 và đã bị xóa trong phiên bản 7. mysqli được giới thiệu trong PHP 5.0.0 và hoạt động trong tất cả các phiên bản PHP 5 và cho đến nay trong tất cả các phiên bản PHP 7. Có lẽ bạn đang nghĩ rằng mysql không được dùng nữa trong PHP 5.5.0.
CJ Dennis

@CJDennis, đó là chính xác những gì tôi đã nói về sự phản đối. Nếu bạn nghĩ rằng có một lỗi trong tiếng Anh của tôi, bạn sẽ được chào đón để chỉnh sửa câu trả lời;)
Mark Kaplun

Tôi đã sửa chữa suy nghĩ của bạn rằng mysqli đã được giới thiệu trong 5.5.0, khi nó được giới thiệu vào 5.0.0.
CJ Dennis

4

Ngoài câu trả lời @MarkKaplun, tôi đăng một số mã từ lớp wpdb:

Đây là cách wpdb::use_mysqlixác định:

Nó được kích hoạt với:

/**
 * Whether to use mysqli over mysql.
 *
 * @since 3.9.0
 * @access private
 * @var bool
 */
private $use_mysqli = false;

và sau đó trong hàm wpdbtạo chúng ta có:

/* Use ext/mysqli if it exists and:
 *  - WP_USE_EXT_MYSQL is defined as false, or
 *  - We are a development version of WordPress, or
 *  - We are running PHP 5.5 or greater, or
 *  - ext/mysql is not loaded.
 */
if ( function_exists( 'mysqli_connect' ) ) {
        if ( defined( 'WP_USE_EXT_MYSQL' ) ) {
                $this->use_mysqli = ! WP_USE_EXT_MYSQL;
        } elseif ( version_compare( phpversion(), '5.5', '>=' ) || ! function_exists( 'mysql_connect' ) ) {
                $this->use_mysqli = true;
        } elseif ( false !== strpos( $GLOBALS['wp_version'], '-' ) ) {
                $this->use_mysqli = true;
        }
}

2

Những gì bạn nên làm để giải quyết vấn đề này, là chỉnh sửa tệp php.ini của bạn.

chạy nơi php.ini tôi tìm thấy của tôi tại:

/etc/php/php.ini (mặc dù tôi không biết hệ điều hành nào bạn đang chạy đơn giản tìm thấy hệ điều hành của bạn)

Hãy tìm hai tệp này:

extension=pdo_mysql.so
extension=mysqli.so

và không chú ý đến họ. Voila, điều đó sẽ hoàn thành công việc bất cứ lúc nào.

Đọc thêm: https://wiki.archlinux.org/index.php/PHP


2

Bạn đang sử dụng Xamppp 7.x cho Windows?

Nó xảy ra với tôi khi tôi nâng cấp Xampp 5.6 lên Xampp 7.1. Kiểm tra tệp cấu hình C: \ Xampp \ php \ php.ini , tôi nhận thấy rất nhiều lỗi liên quan đến tên của các phần mở rộng PHP (chúng thiếu tiền tố php_ và hậu tố. Một trong số đó có liên quan đến mysqli.

Cài đặt sai tôi tìm thấy ở đó:

extension=mysqli

Cài đặt đúng (sau khi chỉnh sửa dòng này):

extension=php_mysqli.dll

Sửa chữa mà giải quyết vấn đề của tôi.

Nhân tiện: đừng quên sửa tất cả các cài đặt sai khác (tên chính xác của các tiện ích mở rộng có thể được nhìn thấy tại C: \ xampp \ php \ ext).

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.