レガシー PHP アプリケーションの作業を始めたばかりで、奇妙な動作と戦っていることに気付きました。シナリオ/コード/エラーを説明しようとします:
すべてのクエリは、接続を開き、セッション全体で開いたままにするシングルトン クラスを介して実行されます (コードを理解できる限り)。
mysql_query
が を返すたびfalse
に、例外がスローされます。多くのクエリは「正常に」実行され、テーブルが存在しないことについて不平を言うことさえあります(私のタスクの1つは、乱雑なクリッパー継承データベーススキームをクリーンアップすることであるため、コードを実行して、必要に応じてテーブルを作成しています)。不足しているテーブルを作成した後、通常、クエリは正常に実行されます。
一部のクエリが
1045
エラーを返しています:Access denied for user 'appuser'@'localhost' (using password: YES)
「奇妙な」動作は次のとおりです。
MySQL インストールで一般的なログを有効にしましたが、アクセス拒否エラーに関する言及はありません。アプリケーション クエリは正常に実行されているようです (ログ形式の一部のセクションを実際に理解するのに問題があるため、「そう思われる」と言いました)。
シングルトン クラスで設定されたユーザー名/パスワードは問題ありません。他の多くのクエリが正常に実行されることに加えて、MySQL CLI インターフェイスを使用してログインできます。MySQL CLI で間違ったユーザー名/パスワードを使用しようとすると、拒否されたアクセスが一般ログに正しく記録されます。
スローされた例外のスタック トレース (明らかに PHP で) は、クエリを処理するシングルトン クラスから例外が実際に発生したことを示しています。
「拒否された」クエリにはパターンがないようです。それらは大きな
SELECT
クエリですが、それ以上のものではありません。LEFT OUTER
結合を持つものもあれば、24FROM
節程度のものもあります。すべてのクエリで結果をログに記録しており
mysql_stat
、実行中のクエリと失敗したクエリの両方の前にサーバーのステータスを出力します。ただし、この関数が実際に MySQL サーバーとの有効な資格情報/セッションに依存しているかどうかはわかりません。
では、ここで何が起こっていると思いますか? どんな手掛かり?経験に基づいた推測はありますか?
誰かがより多くの情報/背景を必要とする場合は、喜んで提供します... :)