Zend Framework: Kimlik, MySQL hataları SQLite geçildiğinde

3 Cevap php

Ben MySQL SQLite kullanarak benim app geçiyorum. Bu SQLite ile çalışır ve bunu MySQL kullanmak değiştirdik şimdi çalışmıyor. İşte ben alıyorum hata mesajı var:

Message: SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using old authentication

Bu ne anlama geliyor?

Note: Ben uzak bir veritabanına erişmeye çalışıyor, bu yerel olarak çalışan Snow Leopard koşuyorum.

O da biraz rahatsız edici istek parametreleri düz metin olarak ekrana adımı ve şifremi terk ediyor.

3 Cevap

PHP 5.3 çalıştırıyor musunuz? mysqlnd is the new native MySQL driver for PHP (ext/mysql , ext/mysqli and PDO make use of it, so it is not a new API but a new way how the three different APIs communicate with the MySQL server) - here mysqlnd ile ilgili iyi bir yazıdır.

Sorun şimdi MySQL sunucu old authentication mechanism mysqlnd uymak mümkün olmadığı kullanmasıdır. mysqlnd MySQL 4.1 ile tanıtıldı yeni 41 bayt şifre ihtiyacı (yani MySQL sunucuları <4,1 bağlanamıyor). Eğer MySQL sunucusu, örneğin üzerinde SET PASSWORD komutunu kullanmak zorunda yeni şifre düzeni kullanmak için kullanıcı tablosunu güncellemek için:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');

Bu şifre düzenini değiştirir ve mysqlnd ile bağlantı sağlayacak. Here Thomas Rabaix tam olarak aynı sorunu açıklar - sadece başvuru için.

Andrew Ben size MySQL istemci eski kimlik doğrulaması kullanarak bir sorun var sanırım.

Sen PDO son mysqlclient kütüphanesini kullanarak emin olun.

Eğer her şeyin gayet iyi olduğunu ve ZF ile oynadıktan sonra yapmak için ilk önce bir PDO örneği test etmek isteyebilirsiniz.

 $db = new PDO("mysql:host=$host;dbname=$database", 
            $username, $password);

Remark On Usernamer / Parola için, Zend Framework belgelerine ki üretim ve geliştirme yapılandırma farklı düzeyini ayarlayarak kullanıcıya bu hataları göstermek için değil geliştirici olduğunu belirten edilmektedir. Zend_config bunun için var, artı error catching controller.

Sorunu çözmek için kullanın :)

SET SESSION old_passwords = 0;
SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));
SET PASSWORD = PASSWORD('abc')

İyi şanslar