ラボ > PHP:各種エラー、FuelPHP:DB関連、DB

FuelPHP1.8でDB接続エラー

FuelPHPで出たエラーだけど、FuelPHPに限らない。

作成日:2018-01-25, 更新日:2018-04-26

基本

既存のサーバにFuelPHP1.8をupしたら使えなかった。正確にはDBに接続が出来なくエラーが出力される。

SQLSTATE [HY000] [2000] mysqlnd can not connect to MySQL 4.1+ using the administration tool to reset your password with the command SET PASSWORD = PASSWORD ('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you may need to remove the old-passwords flag from your my.cnf file

▼Google翻訳に丸投げ

SQLSTATE [HY000] [2000]
mysqlndは管理ツールを使用してMySQL 4.1以降に接続できません。
「SET PASSWORD = PASSWORD( 'your_existing_password')」というコマンドでパスワードをリセットします。
これにより、mysql.userに新しい安全なハッシュ値が格納されます。
このユーザーがPHP 5.2以前で実行されている他のスクリプトで使用されている場合は、my.cnfファイルからold-passwordsフラグを削除する必要があります

対処方法は下記のいずれか。
・my.cnfファイルの修正
・パスワード再設定
・FuelPHPのダウングレード

▼そのときの環境
・PHP7.1(CGI版)
・MySQL5.1.72
・FuelPHP1.8

修正方法:本来のやり方

・「my.cnf」の「old_password=1」を「old_password=0」にする
・mysqlを再起動

修正方法:ログインユーザーのパスワードを書き換える

稼働しているサーバーで、本来のやり方が困難な場合。

基本、下記のようなやり方らしい。

パスワードを作る

SELECT PASSWORD('〇〇〇');
# **********

パスワードを更新する

SET PASSWORD FOR testuser@'%' = '**********';

私の場合は、レンタルサーバ利用なのでレンタルサーバのコントロールパネルを利用してパスワードを再設定した。
※旧パスワードと同じ内容だとプログラム側の変更は不要

修正方法:FuelPHPのダウングレード

FuelPHP1.7ならOKだと思う。

※今回は、パスワード修正したのでコレは試していない。