DB :: selectを呼び出すと、「接続がリセットされました」というメッセージが表示されるのはなぜですか?

DavidHyogo

私のLaravel5.5アプリケーションでは、Postgresqlデータベースでselectクエリを実行するDB :: selectの呼び出しが失敗し、ApacheまたはLaravelのエラーログにエラーが表示されず、「接続がリセットされました」というメッセージが表示されます。このコードサンプルは、関数get_users_with_rolesが存在するため、期待どおりに実行されます。

public function missing_function(Request $request) {
        try{
           $all = DB::select('SELECT * from get_users_with_roles()', []);
        }catch(Illuminate\Database\QueryException $qe){
            return json_encode($qe->getMessage());
        }
        return json_encode($all);
}

ただし、そのSQL文字列を存在しない関数に置き換えると、次のようになります。

public function missing_function(Request $request) {
        try{
           $all = DB::select('SELECT * from test()', []);
        }catch(Illuminate\Database\QueryException $qe){
            return json_encode($qe->getMessage());
        }
        return json_encode($all);
}

接続がリセットされ、ログにエラーが表示されません。ネイティブのPostgresql環境でこの誤ったクエリを実行すると、次のようになります。

SELECT * from test();

明確なエラーメッセージが表示されます:

    ERROR:  function test() does not exist
LINE 1: select * from test()
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

この問題は一貫していないので、それは特に奇妙です。tryブロックがQueryExceptionをキャッチし、Postgresqlエラーメッセージを例外として表示することがあります。

追加してみました

php_flag xcache.cacher Off 
php_flag xcache.size 0 
php_flag xcache.stat Off

.htaccessファイルに移動しますが、役に立ちません。

アプリケーションでPostgresqlユーザー定義SQLおよびplpgsql関数に大きく依存しているため、DB :: selectメソッドを使用する機能が必要です。関連するSQLを作成し、プログラムでDB :: selectメソッドに渡す関数があるので、関数がない場合など、SQLにエラーが発生したときにスローされる例外をキャッチできる必要があります。

更新

この問題は、DB :: selectがSQLエラーを処理する方法にあるようです。存在するがSQLエラーをスローする関数でこれを試しました。繰り返しになりますが、PHPでtry / catchブロックを使用してこれをキャッチできるようにする代わりに、接続をリセットするだけで、LaravelログまたはApacheログのいずれにもエラーを記録しません。

この質問は何の光も当てません。そこで受け入れられた答えは、期待される行動を指します。私の環境では、QueryExceptionはスローまたはキャッチされません。

司教

これのトリッキーな部分は、ブラウザがあらゆる形式のエラーメッセージを表示することを頑固に拒否したことです。その場合は、コマンドラインに移動して試してみるのが好きなので、変数としてのWebサーバーを削除します。

チャットから、コマンドラインに期待どおりのエラーが表示されたことがわかりましたが、正常に表示されませんでした。エラーが出力され、スクリプトが停止しました。これはハードクラッシュであり、Webサーバーに起因するものではありません。

の導入により\Throwable、PHPが一生懸命に死ぬシナリオはますます少なくなっています。そこで、PHPの息を呑むような努力をするために、爆破する直前に何が言われたかを理解するためにregister_shutdown_functionそれを実装しerror_get_lastました。

これにより、ブラウザにエラーメッセージが表示されました(今回は別のブラウザを使用)。しかし、これは再現できませんでした。この時点での洞察はキャッシングでした:composer dump-autoload問題を修正しました!

私は何が起こったのかこれだと思います:

  • Eloquent 例外をスローしました
  • PHPは、Laravelの例外処理クラスを通じてそれをバブリングしていました
  • ある時点で、PHPはオートローダーにないクラスをロードしようとしました
  • PHPが激しくクラッシュしました(これは、PHP 7.0が失敗するケースの1つです)

を実行することによりcomposer dump-autoload、すべての「欠落している」クラスがオートローダーの範囲内に持ち込まれ、再試行すると、正しいコードシーケンスが発生しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

DB :: selectを呼び出すと、「接続がリセットされました」というメッセージが表示されるのはなぜですか?

分類Dev

「ibm_db.exec_imediate」をPythonで呼び出すと、「関数(%s)が返す値が少なすぎます」というメッセージが表示されます。

分類Dev

pymssqlを使用してAzure上のMSSQL DBに正常に接続し、エラーメッセージは表示されないが0行が挿入された状態でINSERTステートメントが実行される

分類Dev

Railsでは、db:seedでトリガーされないモデルの作成/更新に関連付けられた外部API呼び出しをどのように組み込むことができますか?

分類Dev

新しい投稿を公開しようとすると、「django.db.utils.IntegrityError:列「user_id」のnull値が非NULL制約に違反しています」というメッセージが表示されます

分類Dev

laravel5でDB :: commit()なしでDB :: beginTransactionが呼び出された場合はどうなりますか?

分類Dev

mongoでデータベースを表示すると、作成したDBが表示されないのはなぜですか?

分類Dev

削除されていないドキュメントをcouch-dbからフェッチすると、継続的なフィードが変更されます

分類Dev

MYSQLiがDBレコードを更新せず、成功メッセージを表示するのはなぜですか

分類Dev

ノードジェネリックプールエラー[dbオブジェクトは既に接続されています。openは複数回呼び出すことはできません]

分類Dev

jQuery UIから「UncaughtError:初期化前にダイアログでメソッドを呼び出せません。メソッド 'close'を呼び出そうとしました」というメッセージが表示されるのはなぜですか。

分類Dev

Ruby on Rails:DBに新しいオブジェクトを作成するためのフォームが含まれていると、なぜ空の値が表示されるのですか?

分類Dev

パスワードリセットトークンがDBに保存されたことを確認するRSpecテストを作成するにはどうすればよいですか?

分類Dev

SQLite3とExpressJを使用する場合、db.each()メソッドの呼び出し中にapp.get()が非同期でないことを確認するにはどうすればよいですか?

分類Dev

複数の結果セットを取得するためにdb接続を作成、オープン、クローズする必要があるのに、1つのセットを取得する必要がないのはなぜですか?

分類Dev

pygameで「screen」を呼び出すときに「TypeError: 'module'オブジェクトが呼び出せない」というメッセージが表示され続けるのはなぜですか?

分類Dev

出力が「[I @ 15db9742」と表示されるのはなぜですか?

分類Dev

通知のインスタンスを作成し、メッセージが受信されるたびにDBに保存しますDjango Channels

分類Dev

RDS MySQLエラー1045(28000):EC2からdbに接続するときにユーザーのアクセスが拒否されました

分類Dev

node.js mongodbネイティブでdb.destroyDatabaseを呼び出すと、「トポロジが破壊されました」エラーが発生する原因は何ですか?

分類Dev

Djangoでdbをリセットする方法は?コマンド 'reset' not foundエラーが表示される

分類Dev

Djangoでdbをリセットする方法は?コマンド 'reset' not foundエラーが表示される

分類Dev

getNextExceptionを呼び出して原因を確認します:Hibernate / JPAに例外のDBサーバーメッセージを表示させる方法

分類Dev

MAMPを搭載したMacで「db:SQLSTATE [HY000] [2002]接続が拒否されました」というエラーが発生する

分類Dev

セッションを一覧表示しようとすると、tmuxから「サーバーに接続できませんでした」というメッセージが表示されるのはなぜですか?

分類Dev

「http:ハイジャックされた接続でのresponse.Write」というエラーメッセージが表示されるのはなぜですか?

分類Dev

リンクを介してDBに接続されているセッションのリストを取得するにはどうすればよいですか?

分類Dev

すべてのモデルをDBで表す必要がありますか、それともmodellがDBで表されていない場合は、コントローラーのみを作成する方がよいでしょうか。

分類Dev

CakePHP2.4-DBアップデートが渡されたすべてのデータを保存しない1つのフィールドが永続化されることはありません

Related 関連記事

  1. 1

    DB :: selectを呼び出すと、「接続がリセットされました」というメッセージが表示されるのはなぜですか?

  2. 2

    「ibm_db.exec_imediate」をPythonで呼び出すと、「関数(%s)が返す値が少なすぎます」というメッセージが表示されます。

  3. 3

    pymssqlを使用してAzure上のMSSQL DBに正常に接続し、エラーメッセージは表示されないが0行が挿入された状態でINSERTステートメントが実行される

  4. 4

    Railsでは、db:seedでトリガーされないモデルの作成/更新に関連付けられた外部API呼び出しをどのように組み込むことができますか?

  5. 5

    新しい投稿を公開しようとすると、「django.db.utils.IntegrityError:列「user_id」のnull値が非NULL制約に違反しています」というメッセージが表示されます

  6. 6

    laravel5でDB :: commit()なしでDB :: beginTransactionが呼び出された場合はどうなりますか?

  7. 7

    mongoでデータベースを表示すると、作成したDBが表示されないのはなぜですか?

  8. 8

    削除されていないドキュメントをcouch-dbからフェッチすると、継続的なフィードが変更されます

  9. 9

    MYSQLiがDBレコードを更新せず、成功メッセージを表示するのはなぜですか

  10. 10

    ノードジェネリックプールエラー[dbオブジェクトは既に接続されています。openは複数回呼び出すことはできません]

  11. 11

    jQuery UIから「UncaughtError:初期化前にダイアログでメソッドを呼び出せません。メソッド 'close'を呼び出そうとしました」というメッセージが表示されるのはなぜですか。

  12. 12

    Ruby on Rails:DBに新しいオブジェクトを作成するためのフォームが含まれていると、なぜ空の値が表示されるのですか?

  13. 13

    パスワードリセットトークンがDBに保存されたことを確認するRSpecテストを作成するにはどうすればよいですか?

  14. 14

    SQLite3とExpressJを使用する場合、db.each()メソッドの呼び出し中にapp.get()が非同期でないことを確認するにはどうすればよいですか?

  15. 15

    複数の結果セットを取得するためにdb接続を作成、オープン、クローズする必要があるのに、1つのセットを取得する必要がないのはなぜですか?

  16. 16

    pygameで「screen」を呼び出すときに「TypeError: 'module'オブジェクトが呼び出せない」というメッセージが表示され続けるのはなぜですか?

  17. 17

    出力が「[I @ 15db9742」と表示されるのはなぜですか?

  18. 18

    通知のインスタンスを作成し、メッセージが受信されるたびにDBに保存しますDjango Channels

  19. 19

    RDS MySQLエラー1045(28000):EC2からdbに接続するときにユーザーのアクセスが拒否されました

  20. 20

    node.js mongodbネイティブでdb.destroyDatabaseを呼び出すと、「トポロジが破壊されました」エラーが発生する原因は何ですか?

  21. 21

    Djangoでdbをリセットする方法は?コマンド 'reset' not foundエラーが表示される

  22. 22

    Djangoでdbをリセットする方法は?コマンド 'reset' not foundエラーが表示される

  23. 23

    getNextExceptionを呼び出して原因を確認します:Hibernate / JPAに例外のDBサーバーメッセージを表示させる方法

  24. 24

    MAMPを搭載したMacで「db:SQLSTATE [HY000] [2002]接続が拒否されました」というエラーが発生する

  25. 25

    セッションを一覧表示しようとすると、tmuxから「サーバーに接続できませんでした」というメッセージが表示されるのはなぜですか?

  26. 26

    「http:ハイジャックされた接続でのresponse.Write」というエラーメッセージが表示されるのはなぜですか?

  27. 27

    リンクを介してDBに接続されているセッションのリストを取得するにはどうすればよいですか?

  28. 28

    すべてのモデルをDBで表す必要がありますか、それともmodellがDBで表されていない場合は、コントローラーのみを作成する方がよいでしょうか。

  29. 29

    CakePHP2.4-DBアップデートが渡されたすべてのデータを保存しない1つのフィールドが永続化されることはありません

ホットタグ

アーカイブ