2016.07.02 23:05
Andrei

PDO autentikációs hibával elszáll a PHP frissítés után


PHP 5.3-ról feljebb lépni nem egy nagy dolog, viszont ahol PDO-t használsz ott a MySQL kapcsolat elhasal. Mégpedig az mysql_old_password-ra hivatkozva már a konstruktorban. A megoldás egyszerű.


Ahol lehet, ott a motorokat mysql_* függvénytárról PDO-ra (PHP Data Object) cseréltem. Ahol nem modernizáltam még a kódot, ott nem volt gondom, hiszen a mysql_* megy tovább a PHP 5.4 és 5.6 verzió alatt, mintha mi sem történt volna. Viszont a PDO-ban van egy apró változás. Sajnos a rendszergazda az osztott tárhely szerverein eléggé halogatta az átállást, így most érkezett el az idő a frissítésre. Olyan régen 5.3 fölötti PHP-t használok, hogy teljesen elfelejtetem már ezt a problémát. Viszont leállt pár oldalam. Szépen csendben a következő szerelmes levéllel:

 

PDOException SQLSTATE[HY000] [2000]...

...Warning: PDO::__construct(): The server requested authentication method unknown to the client [mysql_old_password] in... 

 

A régi MySQL jelszavak 16 bájton tárolódtak, míg az újak már 41 bájton. Mármint a PDO által használ kapcsolatfelépítésben. Így több lehetőség is rendelkezésünkre áll. Ne szórakozzunk a SET global old_password = 1 trükkel, mert az környezettől függően nagy valószínűséggel eredménytelel lesz.

 

Az adott adatbázison le kel futtatni a következőt (a régi jelszó helyére a régi jelszó kerül értelemszerűen):

 

SET PASSWORD = PASSWORD(''régi jelszó'')

 

A másik lehetőség az adatbázis adminban (Cpanel, Interworx, Plesk, stb) való mysql felhasználó jelszavának frissítése ugyanarra. Mindkét esetben a 41 bájtosra fog módosulni a tárolt változat. Így az érintett, PDO-t használó oldalak mindenféle hekkelés nélkül azonnal el fognak indulni.




A honlap sütiket használ a böngészés támogatására és egyes funkciók elérésére. A honlap további használatával hozzájárul a sütik használatához. A sütik kezeléséről további információt az Adatvédelem menüpont alatt találsz.