🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Alternative PHP Cache (APC)

Alternative PHP Cache (APC)とは、PHPの実行コードのキャッシュ・最適化を行うための拡張モジュールです。オープンフリーソースで、PHP5.4までAPCをキャッシュすることができます。

Q&A

解決済

1回答

1025閲覧

php mysql 予期せぬエラーの処理の仕方

tsuru0508

総合スコア65

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Alternative PHP Cache (APC)

Alternative PHP Cache (APC)とは、PHPの実行コードのキャッシュ・最適化を行うための拡張モジュールです。オープンフリーソースで、PHP5.4までAPCをキャッシュすることができます。

0グッド

0クリップ

投稿2022/02/23 15:05

いつもお世話になっております。

TRY CATCH の基本的な使い方がわかりません。

てっきりTRYの中で予期せぬことがあったら、
勝手にCATCHに飛んでくれると思っていましたが、
上手く動作しないので、調べていると条件に
例外があれば、THROWしろと記載を見ました。
下記のような感じのソースです。

try { // 静的プレースホルダを指定 $pdo -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // エラー発生時に例外を投げる $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //トランザクション開始 $pdo -> beginTransaction(); if( $b == 0 ){ throw new Exception("エラーです"); } //コミット $pdo -> commit(); } catch (PDOException $e){ //ロールバック $pdo ->rollBack(); die($e->getMessage()); };

これだと、例外を予期出来ていると思うのですが・・・
これは、ロールバックが必要なのでこの方がよさそうですが、
完全に予期できない場合の記載はできるのでしょうか?

質問が上手くできず申し訳ありませんが、私の質問を
理解できて回答を導いてくれる方がいらっしゃれば、
是非ご教授頂けると幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

throwするときは完全に意図的に例外処理をしたいときです。
try内で例外が起きなければcatchに飛ぶことはないですし、
提示コードだとPDOException のみcatchするようになっているので、
PDOException 以外はcatchできないようになっています。

「完全に予期しない」をどこまで想定されているかにもよるとは思います。
例外処理を書く時点で、予期可能な例外を処理しようとしているとも言えます。

例えばサーバダウンやネットワークの切断などは予期できないものとなりますが、
同時にアプリケーション側で感知ができないものともなりますので、try-catchでは感知できません。

例外処理とは
(想定内の)エラーが起きたときにやる処理のこと

投稿2022/02/23 20:15

編集2022/02/23 22:38
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsuru0508

2022/02/23 23:51

m.ts10806様 ご回答ありがとうございます。 エラー=例外=想定外の処理と考えておりました。 作る際に色々な問題が発生して、それらはそれなりの処理を行い、 問題が発生しないようにします。それでも、まれに発生する問題を 「想定外の処理」という認識で、そういう能力不足による問題を 全てキャッチしてくれる、凄い機能だと勝手に解釈していました。 教えて頂いたURLにとび、例外処理と呼ばれるものを理解しました。 すっきりしました。ありがとうございます。 CSVを取込む際に、まれに想定外のデータが入ってきます。 DBに登録する際に何が発生するかわからないので、try catch で エラーを受けようと思っていました。受けれてると思っていました。 画面にfatal errorとかでるので、die($e->getMessage()); が表示 してくれているものだと思い込んでいました(恥 お蔭様で、今後正しい問題処理ができそうです! ありがとうございました。
m.ts10806

2022/02/24 00:27

>まれに想定外のデータが入ってきます。 CSVでしたら、入ってくる情報は文字列なのでバリデーションで検査できる範疇に思います。 必須項目、文字数、数値、日付 など、設計時にどこまでの配慮、考慮ができているかというところですね。
tsuru0508

2022/02/24 04:08

そうですね。そこでしっかりと抑えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問