[php] 헤더 및 클라이언트 라이브러리 부 버전 불일치

나는 (를 통해 데이터베이스에 연결을 시도 할 때마다 PHP에서 나는 다음과 같은 경고를 받고 있어요 mysql_connect)

경고 : mysql_connect () : 헤더와 클라이언트 라이브러리 부 버전이 일치하지 않습니다. 헤더 : 50162 라이브러리 : 50524

php -i출력에는 mysqli 아래에 다음 값이 나열되어 있습니다.

클라이언트 API 라이브러리 버전 => 5.5.24

클라이언트 API 헤더 버전 => 5.1.62

php5-mysql php 업데이트를 시도했지만 이미 두 가지 모두 최신 버전입니다. 이 경고가 표시되지 않도록 헤더 버전을 업데이트하려면 어떻게해야합니까?

편집하다

내 MySQL 파일을 모두 최신 버전으로 업데이트해야합니다.

$ apt-get install mysql.*5.5
. . .
mysql-client-5.5 is already the newest version.
mysql-server-core-5.5 is already the newest version.
mysql-server-5.5 is already the newest version.
mysql-testsuite-5.5 is already the newest version.
mysql-source-5.5 is already the newest version.

이전 버전 제거

$ apt-get remove mysql.*5.1
. . .
Package handlersocket-mysql-5.1 is not installed, so not removed
Package mysql-cluster-client-5.1 is not installed, so not removed
Package mysql-cluster-server-5.1 is not installed, so not removed
Package mysql-client-5.1 is not installed, so not removed
Package mysql-client-core-5.1 is not installed, so not removed
Package mysql-server-5.1 is not installed, so not removed
Package mysql-server-core-5.1 is not installed, so not removed
Package mysql-source-5.1 is not installed, so not removed



답변

PHP는 MySQL 5.1로 컴파일되었지만 이제는 5.5.X 제품군의 mysql 라이브러리를 연결하고 있습니다. PHP를 MySQL 5.5로 컴파일 된 버전으로 업그레이드하거나 mysql 클라이언트 라이브러리를 5.1.x로 되돌려 야합니다.


답변

MariaDB를 사용하고 있으며 비슷한 문제가 있습니다.

에서 MariaDB 사이트 ,하여 문제를 해결하는 것이 좋습니다

  1. PHP에서 mysqlnd 드라이버 사용으로 전환합니다 (권장 솔루션).
  2. 더 낮은 오류보고 수준으로 실행 :

    $err_level = error_reporting(0);
    $conn = mysql_connect('params');
    error_reporting($err_level);
    
  3. MariaDB 클라이언트 라이브러리로 PHP를 다시 컴파일합니다.
  4. MariaDB와 함께 원래 MySQL 클라이언트 라이브러리를 사용합니다.

Ubuntu에서 mysqlnd 드라이버를 사용하여 문제를 해결했습니다.

sudo apt-get install php5-mysqlnd

건배!


[업데이트 : 추가 정보]이 드라이버를 설치하면 정수 값을 문자열로 반환하는 PDO 문제도 해결됩니다. 유형을 정수로 유지하려면 mysqlInd를 설치 한 후 다음을 수행하십시오.

$db = new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $pass,
          array( PDO::ATTR_PERSISTENT => true));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);


답변

새로운 MySQL 5.6 제품군의 경우 php5-mysql이 아닌 php5-mysqlnd를 설치해야합니다.

이 버전의 mysql 드라이버 제거

sudo apt-get remove php5-mysql

대신 이것을 설치하십시오

sudo apt-get install php5-mysqlnd


답변

MySQL에서도 동일하게 작동합니다.

sudo apt-get install php5-mysqlnd

나는 MySQL에 대한 솔루션을 찾으려고이 스레드를 읽었으며 ken의 대답도 보았지만 MariaDB에 대한 솔루션을 무시하고 몇 시간을 낭비했습니다. MySQL에도 동일하게 적용될 수 있다는 것이 저에게는 분명하지 않았습니다. 이 게시물은 내가 잃어버린 몇 시간을 절약하기위한 것입니다.


답변

이 오류의 근본 원인은 PHP가 얼마 전에 MySQL 클라이언트 라이브러리와 분리 되었기 때문입니다. 그래서 그 사람에 대해 PHP를 컴파일 (주로 리눅스의 이전 컴파일에)되어 일어나는 는 MySQL 클라이언트의 특정 빌드 이 패키지는 다음과 같이 표시됩니다에 CentOS에서 (업그레이드 (MySQL의 버전을 의미 관계가 설치된)이 아니라 mysqlclientXX, 어디 XX나타내는 패키지 번호). 이것은 또한 패키지 관리자가 MySQL의 하위 버전을 지원할 수 있도록합니다. 그것은 지저분한 방법이지만 PHP와 MySQL이 다른 라이센스를 사용하는 방법을 고려할 때 유일한 방법이었습니다.

MySQLND 는 더 이상 MySQL 클라이언트에 의존하지 않는 PHP 고유의 기본 드라이버 (ND)를 사용하여 문제를 해결합니다. 또한 사용중인 PHP 버전에 맞게 컴파일되었습니다. MySQLND가 PHP가 MySQL과 통신하도록 만든 다른 이유가 없다면 이것은 모든면에서 더 나은 솔루션입니다.

MySQLND를 설치할 수없는 경우 실제로 대부분의 경우이 오류를 무시해도됩니다. 그것은 무엇보다 FYI 통지에 불과합니다. 무섭게 들립니다.


답변

MySQL 네이티브 드라이버 (mysqlnd) 를 사용하여 소스에서 PHP를 컴파일하려면 ,

cd /php/source/path
./configure <other-options> --with-mysql --with-mysqli --with-pdo-mysql
make clean    # required if there was a previous make, which could cause various errors during make
make
make install

에서 /php/source/path/configure --help.

--with-mysql=DIR        Include MySQL support.  DIR is the MySQL base
                      directory, if no DIR is passed or the value is
                      mysqlnd the MySQL native driver will be used
--with-mysqli=FILE      Include MySQLi support.  FILE is the path
                      to mysql_config.  If no value or mysqlnd is passed
                      as FILE, the MySQL native driver will be used
--with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                      If no value or mysqlnd is passed as DIR, the
                      MySQL native driver will be used

이러한 옵션을 사용하여 하나 이상의 PHP MySQL 확장을 포함 할 수 있습니다.
이 옵션에 값이 전달되지 않거나 값이 인 mysqlnd경우 MySQL 기본 드라이버가 사용됩니다.


답변

내 wordpress 사이트에서 동일한 PHP warring이 있습니다 …

오류 : 경고 : mysql_connect () : 헤더와 클라이언트 라이브러리 부 버전이 일치하지 않습니다. 헤더 : 50547 라이브러리 : 50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 1515

원인 : wp 4.2를 4.5 버전으로 업데이트했습니다 (PHP와 MySql 불일치).

1515 행에서 wp-db.php를 변경했습니다.

$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );

…에

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 );
}

내 워드 프레스 사이트에서 오류없이