質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1708閲覧

DB接続部分を関数で切り離した場合、適切な判定条件を知りたい。

FKM

総合スコア3608

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2016/07/27 07:44

PHPプログラムを組んでいて、ずっと気になっている点があるので質問させていただきます。
下はDB接続プログラムのよくあるコードです(今回はmysqlで接続しています)

PHP

1function db_con(){ 2 try { 3 $pdo = new PDO('mysql:dbname=dbname;host=192.168.xx.xx', 'hoge', 'fuga',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 4 $pdo -> setAttribute(ATTR_EMULATE_PREPARES, false); 5 } catch (PDOException $e) { 6 exit('データベースに接続できませんでした。' . $e->getMessage()); 7 } 8 return $pdo; 9} 10 11 12$pdo = db_con(); //データベースの接続 13if( ????? )){ 14 //DBに接続できた場合の処理 15}else{ 16 //接続エラー時の処理 17} 18

色んなサイトを見ても、データベースの接続を定義関数で切り離している例を見つけられず、if文以下の?????に何を記述するのが一番ベストなのか迷っています。自分は昔、

PHP

1if(is_object($pdo)){ 2}else{ 3}

としていたのですが、どうも心許ない気もします。経験豊富な皆様の意見を待っています。

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

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

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

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

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

guest

回答2

0

この処理だと接続できないときはexitしているので、そもそも関数から戻ってこないのでは。
なのでif文による判定の必要なし。

投稿2016/07/27 07:51

ttyp03

総合スコア16996

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

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

FKM

2016/07/27 08:31

ご返答ありがとうございます。確かにexitを実現しているとそこで関数は戻ってこないですよね。ただ、自分の最終目的はdb_con()の部分を外部ファイルにしたかったわけです。
guest

0

ベストアンサー

質問文に記載されている通りだとすると、接続に失敗した場合はcatchされてexitされているので、その後にif文を挟む必要がありませんね。
db_con()からreturnがあれば、それは接続出来たという事。
接続に失敗していたら、そもそもexitしているのでその後の処理でif elseを書いてもそこは処理されない。

ですので、db_con()の中でcatchせずに、db_con()をコールするところで

php

1try { 2 $pdo = db_con(); 3 //接続成功時の処理 4catch { 5 //接続失敗時の処理 6}

とするのが形としては正しいのではないでしょうか。

投稿2016/07/27 07:49

編集2016/07/27 07:51
kunai

総合スコア5405

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

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

FKM

2016/07/27 08:25

ご返答ありがとうございます。自分の最終目的はdb_con()の部分を外部ファイルにして呼び出すことだったので、この形を使ってやりたいことを実現できました。try、catchはもう一つ理解不足だったので、見直したいと思います。
kunai

2016/07/27 08:28

try catchについてはつい先日疑問に思われている質問がありまして、そちらでも回答させていただいています。 良ければご一読下さい。 https://teratail.com/questions/42131
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問