Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z połączeniem z bazą danych.
Forum PHP.pl > Forum > PHP
Doolar
Witam,
Na początek kawałek prostego kodu, w ramach testów połączenia z baza tylko, bo tutaj są problemy:
  1. mysql_connect('sql.xxx.nazwa.pl:3306','yyy','zzz');
  2. @mysql_select_db('yyy') or die("DATABASE NOT FOUND");


Wywala mi błąd typu:
  1. Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected in htdocs/123.php on line 2
  2.  
  3. Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in /htdocs/123.php on line 2
  4.  
  5. DATABASE NOT FOUND


Wersja klienta MySQL: 5.0.90

Problem wygląda następująco:
Kod ten na lokalnym serwerze typu wamp/xampp działa ok (oczywiście inny adres bazy)
Wrzucony na serwer z obsługa PHP też działa prawidłowo.
problem powstaje gdy kod ten podeślę znajomemu który wrzuca to na serwer oparty na linuxie.
Wywala ten błąd.
Czytał iż może być to problem z wersją MySQL i starym hashowaniem.
Jednak skoro nie działa tylko u niego problem tkwi raczej w jego serwerze,
Firewall etc całkowicie wyłączony, i to samo, choć to nie w tym problem raczej.

Ma ktos pomysł o co tu chodzi?
lukaskolista
z tresci bledu wnioskuje, ze haslo, user lub cos innego jest za krotkie, niz jest to oczekiwane, chociaz nigdy nie mialem takiego problemu wiec to tylo sugestia do sprawdzenia
Doolar
Taj jak mówiłem wcześniej, na innym serwerze ten sam kod dział prawidłowo i nie ma tego problemu...
Więc jest tak że baza zostaje ta sama, przenosimy tylko ten plik na inny serwer i wtedy błąd się ujawnia.
Bags_Bunny
Która wersja PHP i rozszerzenia MySQL (mysqlnd)?
Doolar
Informacje mojego serwera (prosto phpmyadmin):
PHP - 5.2
Wersja serwera: 5.0.91-log
Wersja klienta MySQL: 5.0.90

Info od znajomego któremu to nie działa:
PHP - 5.3.5
MySQL - 5.5.8

Pracujemy na tym samym serwerze MySQL, tylko różnych serwerach PHP, tak jak wspominałem jego serwer jest pod linuxem, może to ma wpływ na błąd...
pmir13
Błąd taki pojawia się gdy php w wersji 5.3 lub nowszej próbuje połączyć się z bazą, w której hasła zapisywane są w starym formacie.
Mysql w wersjach starszych niż 4.1 używał pól o długości 16 bajtów do zapisywania zakodowanych haseł. Wersja 4.1 wprowadziła 41-bajtowe pola. Sam fakt, że baza jest teraz w wersji wyższej nie oznacza że tabela user w bazie mysql jest w nowym formacie.

http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html

Ewentualnie można też spróbować downgrade php do wersji poniżej 5.3, ale tego bym nie polecał.
Doolar
OK. problem faktycznie tkwi w tym że mimo nowszej wersji MySQL hash jest 16 bajtowy. W wersji php poniżej 5.3 jest ok.
old_password jest włączone i niestety nie mam możliwości czegokolwiek tutaj ruszyć raczej.

Zostaje więc downgrade PHP? Czy da jakoś to obejść?
pmir13
Najlepszym rozwiązaniem jest naprawdę poprawienie bazy. Nie przypuszczam by był to jakiś mocno oblegany serwer, telefon nie przestawałby dzwonić od wkurzonych klientów, którym nie działają strony z php+mysql. Zostawianie bazy w 16-bajtowej wersji haseł to proszenie się o problemy na przyszłość. Nie bez powodu nowe wersje php nie obsługują starych haseł, wymuszając niejako upgrade mysql. Zawsze można jakoś dogadać się z adminem by to zrobił, włącznie z demonstracją przechwycenia haseł, co w starym formacie jest do zrobienia, by go przekonać że nie dba o bezpieczeństwo. Ten upgrade to nie jest jakaś wielka robota, wystarczy odpalić gotowy skrypt z mysql, do którego instrukcję masz we wcześniejszym linku, wywalić old_password z opcji startu, zrestartować i ponownie ustawić hasła.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.