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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

1回答

6966閲覧

データベース接続コードの意味についての質問

YousukeTanaka

総合スコア79

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2015/12/10 08:35

php初心者で現在、学習しているものです。

現在、従業員の管理画面を作成しており、従業の一覧表示画面を作成中です。
その画面の中で以下のコードが出てきましたが、コードの意味の理解が曖昧ですので、
教えていただければ幸いです。

以下のようなコードを書いております。

<?php error_reporting(E_ALL & ~E_STRICT); ini_set('display_errors', '1'); try { //データベースへの接続 $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dbn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//エラーハンドリング設定 //SQL文を使って、レコードを追加。 $sql='SELECT code,name FROM mst_staff WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute($data); //データベースから切断 $dbh=null; print'スタッフ一覧<br/>'; print'<form action="staff_edit.php" method="post">'; while(true) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print'<input type="radio" name="staffcode" value="'.$rec['code'].'">'; print $rec['name']; print'<br/'; } print'<input type="submit" value="修正">'; print'</form>'; } catch(Exception $e) { print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?>


以下のwhile文の理解を確認させてください。私の理解では、whileはループを表すコードで、
trueは存在を表す表現と理解しています。

従って、ここでは、「$recに何のデータもなければ、抜けなさい。ただ、データがある限りは、codeとnameを出力し続けなさい。」と言っていると理解しておりますが、この理解でよろしいでしょうか?

while(true) { }

②while文の中に、「$rec=$stmt->fetch(PDO::FETCH_ASSOC);」というコードがあります。
このコードの理解は、「$stmtを表示するために、データベースに情報を取りに行き、$recという箱に入れなさい」という理解でよろしいでしょうか?

③tryから始まる構文の直後にも、データベースに接続するコード
「dbh=new PDO($dbn,$user,$password);」を書いています。while文の中で「$rec=$stmt->fetch(PDO::FETCH_ASSOC);」を使って、再度、データベースに接続する意味は何でしょうか?それとも、
これらのコードはそれぞれ別の意味をもっているのでしょうか?

上記の理解が非常に曖昧です。以上、ご助言何卒よろしくお願いいたします。

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

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

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

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

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

izkn

2015/12/10 09:08

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答1

0

①はそんな感じです。

②の時点では、$stmtにはすでにデータベースから取ってきたデータが入っているとお考えください。それをfetch、一行取り出して$recという箱に入れろと書いてあります。すべて取り尽くしていたのなら$recには何も入らないので、次の行の if($rec==false) に引っかかるわけです。

③try直後のは「データベースと接続を確立する」、そのあとの $stmt->execute($data) が「その接続上でデータベースにデータを要求」、whileループ内のfetchで「取得したデータを一行ずつ読む」です。

投稿2015/12/10 10:20

yuba

総合スコア5568

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

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

yuba

2015/12/11 01:49

ここからは現在の作業には関係ないので読み飛ばしていただいて構いませんが、「$stmtにはすでにデータベースから取ってきたデータが入っている」と書いたのはちょっと嘘を含んでいます。 本当に取得データが全部$stmtに入っているとすると、取得結果が膨大な行数(例えば数千万行)だったときに処理は止まるメモリは溢れるで大変なことになります。 なので本当は$stmtは「結果をすべて持っている」のではなく「続々と届く結果の窓口になっている」ような内部動作になっています。 どちらにしろ「順に一行ずつ結果を取り出す」ことは可能なので、「結果をすべて持っている」と思っていてもまあ間違いなくプログラミングはできる、というわけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問