Üstbilgiler ve istemci kitaplığı küçük sürüm uyuşmazlığı


83

PHP'de bir veritabanına (aracılığıyla mysql_connect) bağlanmaya çalıştığımda aşağıdaki uyarıyı alıyorum

Uyarı: mysql_connect (): Başlıklar ve istemci kitaplığı küçük sürüm uyuşmazlığı. Başlıklar: 50162 Kitaplık: 50524

Benim içinde php -içıkış ben mysqli altında listelenen aşağıdaki değerlere sahip

İstemci API kitaplığı sürümü => 5.5.24

İstemci API başlığı sürümü => 5.1.62

Php5-mysql ve php'yi güncellemeyi denedim ama zaten ikisinin de son sürümündeyim. Başlık sürümünü güncellemek için bu uyarıyı görmeyi nasıl bırakırım?

DÜZENLE

MySQL dosyalarımın tümü en son sürüm olacak şekilde güncellenmelidir:

$ 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.

Eski sürümlerin kaldırılması

$ 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

mysql öğelerini de güncellemeniz gerekecek. mysql-client veya her neyse.
Marc B

@MarcB MySQL paketinin en son sürümlerine sahip olmalıyım (son düzenlememe bakın)
Ian Hunter

1
"İstemci API başlığı" sürümü, PHP çalıştırılabilir dosyasına kodlanmış olduğundan yükseltilemez. Bunlar, PHP'nin derlendiği sırada PHP paketi yöneticisinin sistemine yüklenen mysql başlıkları (ve kitaplıkları) idi. Bunları yükseltemezsiniz. PHP'nin bu sürümünün yeniden çalışması için MySQL 5.1.X kitaplıklarına geri dönmeniz veya PHP'yi MySQL 5.5.X ile derlenmiş bir sürüme yükseltmeniz gerekir.
dAm2K

@ dAm2K Görünüşe göre sürüm , mevcut mysqli.so dosyamı yenisiyle değiştirerek yükseltilebildi.
Ian Hunter

1
ABI uyumluluğunu kontrol etmenin bir yolu olup olmadığını gerçekten bilmiyorum ... garip httpd çocuk hataları için apache error_log dosyasını kontrol etmeniz yeterli. 3-4 gün sonra hata gelmezse, iyi olmalısınız.
dAm2K

Yanıtlar:


31

PHP'niz MySQL 5.1 ile derlendi, ancak şimdi 5.5.X ailesinin bir mysql kitaplığını birbirine bağlıyor. PHP'yi MySQL 5.5 ile derlenmiş bir sürüme yükseltmeniz veya mysql istemci kitaplıklarını 5.1.x'e geri döndürmeniz gerekir.


1
Temelde yaşadığım sorun buydu, ancak herhangi bir şeyi yükseltmek veya düşürmek yerine, mysqli.so dosyasını MySQL 5.5 ile derlenmiş PHP içeren bir sunucudan çekip / usr / lib / php5 / dizinime yapıştırabildim . Ancak gidilecek en güvenli yol olduğundan emin değilim, bu yüzden bunu cevap olarak kullanmak istemiyorum. Yardımınız için teşekkürler.
Ian Hunter

128

MariaDB kullanıyorum ve benzer bir sorun yaşıyorum.

Gönderen mariadb sitesinde , bunu düzeltmek için tavsiye edilir

  1. PHP'de mysqlnd sürücüsünü kullanmaya geçin (Önerilen çözüm).
  2. Daha düşük bir hata raporlama düzeyiyle çalıştırın:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. PHP'yi MariaDB istemci kitaplıkları ile yeniden derleyin.
  4. MariaDB ile orijinal MySQL istemci kitaplığınızı kullanın.

Ubuntu'da mysqlnd sürücüsünü kullanarak sorunum çözüldü:

sudo apt-get install php5-mysqlnd

Şerefe!


[güncelleme: ekstra bilgi] Bu sürücüyü yüklemek, tamsayı değerini bir dizi olarak döndüren PDO sorununu da çözer. Türü tam sayı olarak tutmak için, mysqlInd'i yükledikten sonra bunu yapın

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

4
Cevap bu olmalı, çünkü bu mysql ile de çalışıyor
Justin E

1
Bu, Ubuntu'daki mysql ve php uyuşmazlığıyla ilgili sorunumu çözdü. Teşekkürler!
jamescampbell

1
teşekkürler, bu mysql cluster 7.30 için çalışıyor. Bundan çok memnunum: D
haidarvm

hata raporlamayı kapatmak. en iyi çözüm bu. : D
MaXi32

2
maria db ve php7 ile mysqlnd harika çalışıyor, cevabınız için teşekkürler!
Ricardo BRGWeb

69

Yeni MySQL 5.6 ailesi için php5-mysql değil php5-mysqlnd kurmanız gerekir.

Mysql sürücüsünün bu sürümünü kaldırın

sudo apt-get remove php5-mysql

Ve bunun yerine bunu kurun

sudo apt-get install php5-mysqlnd

9
Lütfen cevabınızı biraz açıklayınız. Bu paketlerin yaptığı gibi şeyler.
Machavity

4
Yeni MySQL 5.6 ailesi için php5-mysql değil php5-mysqlnd kurmanız gerekir.
Carlos Buenosvinos Zamora

Sorunu çözdü. MySql'i (AWS RDS MySql Örneği) 5.5'ten 5.6'ya yükselttiğimde bu sorunla karşılaşıyordum.
Rahul Prasad

3
Bunun düzgün çalışması için Apache'nin yeniden başlatılması gerektiği açıktır. Sadece apaçık
olanı

1
Bu phpMyAdmin'imi bozdu. Itseems phpMyAdmin, MySQL yerel sürücüsü ile çalışamaz.
Ehsan

23

Aynısı MySQL için de geçerlidir:

sudo apt-get install php5-mysqlnd

MySQL için çözüm bulmaya çalışırken bu konuyu okudum ve ken'in cevabını da gördüm, ancak MariaDB'nin çözümünü görmezden geldim ve bu şekilde birkaç saat harcadım. Benim için aynısının MySQL için geçerli olabileceği net değildi. Bu gönderi sadece kaybettiğim birkaç saati size ayırmak için.


benim için iyi düzeltme, ardından sudo systemctl restart mysql sudo systemctl restart apache2
Paul

Kurulumu yapmak ve bağımlılıkların php5-mysql'yi kaldırmasına izin vermek çok daha iyidir. Bazı sistemler alternatif olmadan php5-mysql'nin temizlenmesini sevmez.
Rui F Ribeiro

11

Bu hatanın temel nedeni, PHP'nin kendisini MySQL İstemci kitaplıklarından bir süre önce ayırmasıdır. Peki bu insanlar karşı PHP derlemek olacak (özellikle linux eski derlemesinin üzerine) olan oluyor MySQL Client belirli bir yapı (MySQL sürümünü anlam yüklü alakasız) ve bu paket olarak listelenir CentOS içinde (yükseltme değil mysqlclientXX, neredeXX temsil Paket numarası). Bu aynı zamanda paket bakımcısının MySQL'in daha düşük sürümlerini desteklemesine de izin verir. Bunu yapmanın dağınık bir yolu, ancak PHP ve MySQL'in farklı lisansları nasıl kullandığının tek yolu buydu.

MySQLND , problemi PHP'nin artık MySQL İstemcisine dayanmayan kendi yerel sürücüsünü (ND) kullanarak çözer. Ayrıca kullandığınız PHP sürümü için derlenmiştir. Bu, MySQLND'nin PHP'nin MySQL ile konuşmasını sağlamak için yapılmasının başka bir nedeni yoksa, her yerde daha iyi bir çözümdür.

MySQLND'yi kuramazsanız, bu hatayı çoğunlukla güvenle göz ardı edebilirsiniz. Her şeyden çok bir FYI uyarısı. Kulağa korkutucu geliyor.


2

Php'yi kaynaktan MySQL yerel sürücüsü (mysqlnd) ile derlemek için ,

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

Kimden /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

Bu seçenekler kullanılarak bir veya daha fazla PHP MySQL uzantısı dahil edilebilir.
Bu seçeneklere bir değer aktarılmazsa veya değer ise mysqlnd, MySQL yerel sürücüsü kullanılacaktır.


Cevabınız benim için çok değerliydi. İçinde , derlenmiş sürücüyü düzgün kullanmak için HER İKİSİNİ --with-mysqlve --with-mysqliseçenekleri kullanmam gerektiğini okudum . Bu yüzden, bu sefer yapılandırma komutumu tekrar yaptım: `--with-mysql = / home / stephane / programlar / mariadb / install \ --with-mysqli = / home / stephane / programlar / mariadb / install / bin / mysql_config` ve sorun çözüldü. Artık doğru MariaDB istemci sürümünü kullanıyor.
Stephane

1

WordPress sitemde de aynı php savaşım var ...

Hata: Uyarı: mysql_connect (): Başlıklar ve istemci kitaplığı küçük sürüm uyuşmazlığı. Başlıklar: 50547 Kitaplık: 50628 /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php satır 1515

Neden: wp 4.2'yi 4.5 sürümüne güncelledim (PHP ve MySql uyuşmazlığı)

1515 satırında wp-db.php'yi değiştirdim

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

-e

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

WordPress sitemde savaşmadan hata yaptı


Bilginize, bu PHP7 altında çalışmayı durduracak çünkü mysql_ işlevleri kaldırıldı
Machavity

1

Etki alanı web barındırma için cpanel veya whm erişiminiz varsa ...

CPanel'de, "Yazılımlar ve hizmetler" sekmesine gidin, >> ve ardından "PHP Sürümünü Seç" seçeneğine tıklayın >> istediğiniz php sürümünü ayarlayın ...

Uyarı: mysql_connect (): Başlıklar ve istemci kitaplığı küçük sürüm uyuşmazlığı.  Başlıklar: 50547 Kitaplık: 50628 chennaitechnologies.com

Örneğin. Mevcut PHP sürümü:

PHP Sürümü [5.2] (5.2, 5.3, 5.4, 5.5, 5.6 mevcut php sürümlerinin listesi)

Uyarı: Yerel php sürümü için php modüllerini ve php seçeneklerini PHP Seçici aracılığıyla değiştirmek imkansızdır

5.6 php sürümünü seçtim, wordpress blog sitemde bu hata giderildikten sonra ...


1
Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
Headers:50547 Library:100026

Yukarıdaki hatayı sadece Apache'mi yeniden oluşturarak çözdüm:

cPanel Version  56.0 (build 25)
Apache Version  2.4.18
PHP Version 5.5.30
MySQL Version   10.0.26-MariaDB


0

WHM ve cPanel için, bazı sürümlerin derlemek için mysqli setini açıklamaları gerekir.

CENTOS 6.9 xen pv [dc] v68.0.27 altında WHM'yi kullanarak, tüm seçeneklere bakarak Apache / PHP'yi yeniden oluşturmak ve oluşturmak için mysqli'yi seçmek gerekiyordu. Varsayılan, kullanımdan kaldırılan mysql'yi oluşturmaktı. Artık amortisman mesajları gitti ve biri gelecekteki MySQL yükseltmeleri için hazır.


0

Ben de centos7'de aynı sorunla karşılaştım. Php-mysql'nin kaldırılması ve php-mysqlnd'in yüklenmesi sorunu çözdü. Öneriniz için teşekkürler Carlos Buenosvinos Zamora.

İşte centos7'deki komutlarım, buradaki cevapların çoğu Debian / Ubuntu'ya dayandığından, bu herhangi birine yardımcı olabilir.

Kurulu php-mysql paketini bulmak için

yum list installed | grep mysql

Yüklü php-mysql paketini kaldırmak için

yum remove php55w-mysql.x86_64

Php-mysqlnd'yi kurmak için

yum install php-mysqlnd.x86_64

0

Hosting şirketim, php uzantılarında "mysqli" yi devre dışı bırakıp "nd_mysqli" yi etkinleştirerek bunu düzeltmemi söyledi.

Hata gitti, ancak bunu düzeltmek için doğru yöntem olup olmadığını anlayacak bilgim yok.


-1

PHP sürümünün 5.6'dan 5.5'e değiştirilmesi Düzeltildi .

Kontrol paneli> CGI Script'e gidip oradan PHP versiyonunu değiştirmelisiniz.


Hepimiz sürümlerde geri dönmemek için en son sürüme geçmeye çalışıyoruz.
karmafunk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.