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

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

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

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

データベース

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

Q&A

解決済

2回答

6784閲覧

PHPにおけるDBハンドルとDBコネクションの意味を教えて下さい。

newyee

総合スコア213

PHP

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

データベース

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

0グッド

1クリップ

投稿2017/09/01 03:38

PHP勉強中の者です。
PHPを勉強していたら、DBハンドルとDBコネクションという言葉が出て来たのですが、この意味を教えて頂きたいです。

自分なりにもDBハンドル,DBコネクションについては調べてみまして、色々なサイトを参考にさせて頂いたのですが、分からない部分がありましたので、その点についてお伺いしたいと思います。
まず、DBハンドルに関しましてヤフー知恵袋の質問で調べていましたら、ベストアンサーの回答で「データーベース操作用プログラムの先頭アドレス(ハンドル)を取得する」との記述があったのですが、この意味がよく分からなかったです...
ここの記述に関しましては、「メモリ」などの説明があり、どう説明していいか分かりませんでしたので、以下にリンクを張らせていただこうと思います。
[ヤフー知恵袋]DBハンドルについての質問

DBコネクションに関しましては、某サイトで「データベースにアクセスできように接続すること、もしくはその際に取得できるConnectionインターフェイスのインスタンスを指す。 」との説明がなされていたのですが、「インターフェイスのインスタンス」の意味が訳分からない状態でして...
「インスタンス」を調べたのですが「クラス」などの分からない単語がかなり出てきて理解できませんでした...
「クラス」というのはまだ勉強していないのですが、PHPにおけるオブジェクト指向型と呼ばれるもののことなのでしょうか・・・?

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

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

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

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

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

guest

回答2

0

ベストアンサー

コネクションとハンドルの意味を知りたいというタイトルですが、インスタンス、クラス、オブジェクト指向まで言及していて、これを説明するとたぶん入門書1冊のボリュームになります。
なのでタイトルどおりにコネクション、ハンドルについてのみ説明します。

#コネクションについて

二つのシステムを接続する手続きが必要です。それがコネクションです。

人間同士でも、古今東西ゲームをするときは、
「古今東西」「いぇーい」という掛け声を掛け合ってから始めます。
これもコネクションです。

あるメッセージを接続したいシステムに投げたとき(古今東西)に、接続していいよ(いぇーい)という応答を返します。
そして接続を確立した後に、実際のデータのやりとり(山手線の名前)を始めます。

実際のシステムだと、たとえばガラケーでメールを送るときなど、キャリアのサーバーにコネクションを張って接続を確立してから通信をはじめます。

電話もそうですよね。電波のある場所で、番号を入力して接続を開始します。

#ハンドルについて

システムは接続を要求してきた人に対して全てOKを返すわけではありません。
接続するには接続数という制限があります。
どんなに優秀な人間でも5人の人と同時に会話なんてできませんよね。※私は2人でも無理です。
電話も1つしか接続できませんよね。(ネット電話で複数同時接続も可能ですが)
接続数が上限に達した場合、その後に接続してきた人を拒否しないといけません。

そこで、接続ができた人にはハンドルを渡します。
車のハンドルと同じです。ハンドルを握っている人が車の運転をすることができますよね。
※運転免許を持ってるとか、そういう法律のことを言ってるわけではありません。物理的に運転することが可能な位置(運転席)にいるということ。

ハンドルを受け取った人が通信可能で、ハンドルを受け取れなかった人は通信できないのです。

やりとりが完了したら接続を解除します。
解除することでハンドルを開放し、他の接続にハンドルを提供できるようになります。

投稿2017/09/01 04:52

編集2017/09/03 07:46
Tak1016

総合スコア1408

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

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

newyee

2017/09/01 08:09

ご回答ありがとうございます。 すごく分かりやすく説明して頂き、あまりDBというかネットワーク自体に詳しくない僕でも理解することができました。 これから勉強を進めていく中で、もっと詳しいことも理解できるよう頑張っていきたいと思います!
guest

0

Tak1016さんの回答が素晴らしくわかりやすいので、問題ないと思います。
下記では言語的なアプローチで回答します。

英語の意味そのままなのですが、英語の意味があいまいだとなかなか想像しづらいかもしれません。

connection(コネクション)

連結(すること)、結合、連接、(電話の)接続、連結するもの、(機械の)つなぎ、(因果的・論理的な)関係、関連、(人と人との)間柄、関係

handle(ハンドル)

取っ手、ハンドル、柄、取っかかり、利用される機会、(Sir などの)肩書き、名前、(織物の)手ざわり

つまり、

■DBコネクション(DB connection)
DBとつながっている状態のことです。プログラムのソースコードの中には登場しません。

■DBハンドル(DB handle)
プログラムソースコード中で、DBをハンドリングする(扱う)ための値やオブジェクトのことです。
また、DBリソースポインターや、単にDBリソースとも呼ばれます。

つまり、DBコネクションをオープン(開始)して、DBハンドルを利用してDBと通信するわけです。


なんで、DB使うのにコネクションとか、ハンドルとか出てくるのか?

PHPとDBは別々のソフトウェアで、お互い決められた原則ルール(プロトコルと呼びます)で通信しなければなりません。
また、この原則ルール(プロトコル)はプログラムが違っても同じなわけです。

どのようなプログラムでも異なったソフトウェアなどと通信や連携する場合、大体やることは同じです。プログラムの関数名が違ったりするだけです。

コネクションを開始しただけだと、読みたいのか、編集したいのか、消したいのかわかりませんし、それぞれの組み合わせもあります。よって、コネクションオープンと、実際の読み出しなどの通信・連携とは分かれているわけです。

  1. コネクションオープン
  2. コネクションオープンしたときのハンドル(リソースまたは、リソースポインター)を利用して通信・連携する
  3. コネクションクローズ(プログラムによっては自動的に閉じられるものもあります)

php

1// PDOでDBに接続する例 2$handle = new PDO('mysql:dbname=データーベース名;host=localhost', 'ユーザー名', 'パスワード'); 3 4foreach ($handle->query('SELECT * FROM テーブル名;') as $rows) { 5 echo implode(",\t", (array)$rows)."\n"; 6}

たとえば、PHPでファイルを読み込む場合も同様のことが起きます。
ファイルはウィンドウズなどのOS(オペレーション・システム)で管理されていて、PHPからファイルを扱うにはOSに聞かないとわからないためです。

php

1// ファイルの中身を表示する例 2$handle = fopen('ファイル名', 'r'); 3echo fread($handle, 1024); 4fclose($handle); 5 6// ファイルポインター(file pointer)を略して下記のような変数を設定する場合が多いです 7$fp = fopen('ファイル名', 'r'); 8echo stream_get_contents($fp); //バイト数を指定しないでファイルの中身全部を読み出します 9fclose($fp); 10 11// 上記と同じで、file_get_contents()内部でfopen()などを自動的に行っています 12echo file_get_contents('ファイル名');

投稿2017/09/01 07:44

Tomak

総合スコア1652

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

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

newyee

2017/09/01 08:22

ご回答ありがとうございます。 まだまだ僕の勉強不足故、難しく感じてしまう部分もあったのですが、少し高度な内容について知ることができ勉強になったと思っております。 今後勉強を続けていき、回答下さった部分が完全に分かるよう頑張っていきたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問