// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= PHPを使用するデータベース駆動型アプリケーションの作成
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: PHPを使用するデータベース駆動型アプリケーションの作成 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, PHPを使用するデータベース駆動型アプリケーションの作成

このレッスンでは、ウィッシュ・リスト・アプリケーションの開発での最後の準備手順である、テスト・データを持つサンプルのデータベースの作成を示します。このチュートリアルの手順を完了するには、ウィッシャのデータを格納するデータベースが必要です。NetBeans IDEでは、IDEのインタフェースを使用して、これらのアクティビティをすべて実行できます。
始める前に、link:wish-list-tutorial-main-page.html[+PHPを使用するCRUDアプリケーションの作成 - メイン・ページ+]にあるチュートリアルの要件を確認してください。

現在のドキュメントは、PHP向けのNetBeans IDEでのCRUDアプリケーションの作成というPHPチュートリアルの一部です。



[[register-mysql]]
== MySQLサーバーの登録

MySQLデータベース・サーバーをIDEに登録していない場合、またはMySQLとNetBeans IDEを組み合せて使用する場合の一般的な情報が必要な場合、link:../ide/mysql.html[+MySQLデータベースへの接続+]を参照してください。


== データベースのユーザーの作成

データベースを作成する前に、データベースですべての操作を実行する権限が与えられているユーザーを作成する必要があります。データベースのユーザーを作成するには、次を行う必要があります。

* <<connectToMySQLServer,MySQLサーバーにルート・ユーザーとして接続する>>。
* <<connectToDefaultDatabase,MySQLシステム・データベースにルート・ユーザーとして接続する>>。データベースに接続しないとSQLコマンドを実行できないため、これは、ユーザーを作成するSQLコマンドを実行できるようにするために必要なステップです。
* <<createUserQuery,ユーザー作成のMySQL文を実行する>>。

1. IDEを起動し、「サービス」ウィンドウに切り替えて([Ctrl]-[5])、「データベース」ノードを展開します。
2. MySQLデータベース・サーバーに
接続するには、「 ``MySQLサーバー`` 」ノードに移動して、コンテキスト・メニューから「接続」を選択します。 

image::images/mysql-ctxmenu-connect.png[]



. NetBeans IDEはMySQLサーバーに接続し、サーバー経由で使用できるデータベースを確認して、システムの ``mysql`` データベースを検出し、対応する新しい ``mysql`` ノードをデータベース・ツリーに追加します。 

image::images/mysql_node_added.png[]



. SQLコマンドを実行するには、データベースに接続する必要があります。MySQLシステムのみ使用可能なので、それに接続する必要があります。
システム・データベースに接続するには、「 ``mysql`` 」ノードに移動し、コンテキスト・メニューから「接続」を選択します。接続がまだ存在していない場合は、「データベースの新規接続」ダイアログ・ボックスが表示されます。「ユーザー名」フィールドは、デフォルトで「root」と入力されています。「パスワード」フィールドに、ルート・ユーザーのパスワードを入力します。

NOTE: 以前に`mysql`データベースに接続したことがある場合、このダイアログは表示されません。かわりに、新しい接続ノードがツリーに表示されるだけです。

image::images/create-new-database-connection.png[] 

「データベースの新規接続」ダイアログ・ボックスに、「接続が確立されました。」というメッセージが表示されます。「OK」をクリックします。 ``jdbc:mysql://localhost:3306/mysql`` という名前の新しいノードがデータベース・ツリーに追加されます。


. 「 ``jdbc:mysql://localhost:3306/mysql`` 」ノードに移動し、コンテキスト・メニューから「コマンドの実行」を選択します。

image::images/execute-command.png[]

「SQLコマンド」ウィンドウが開きます。「SQLコマンド」ウィンドウで、次の文のような構文を使用します。

[source,sql]
----

CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'phpuserpw'
----
コンテキスト・メニューから「文の実行」を選択します。コマンドが正常に実行された場合、ステータス・バーに「SQL文の実行に成功しました。」というメッセージが表示されます。別のメッセージが表示された場合は、構文を確認し、メッセージ・ヒントに従います。


== ウィッシュリスト・データベースの作成

データベースを作成するには:

1. 「 ``MySQLサーバーlocalhost:3306`` 」ノードに移動し、コンテキスト・メニューから「データベースを作成」を選択します。「MySQLデータベースの作成」ダイアログ・ボックスが表示されます。フィールドに次のように入力します。
* 「データベース名」フィールドに、「wishlist」と入力します。
* 「ユーザーにフル・アクセスを許可」チェックボックスをオンにし、ドロップダウン・リストから「 ``phpuser@localhost`` 」を選択して「OK」をクリックします。

image::images/create-user.png[]

「ユーザーにフル・アクセスを許可」機能は常に動作するわけではありません。これが動作しない場合、ルート・ユーザーとして<<EstablishConnection,データベースに接続>>し、SQL問合せ[examplecode]# ``GRANT ALL ON wishlist.* TO phpuser@localhost`` #を送信します。

データベースへの接続が、ツリーに表示されます。ただし、接続は`root`ユーザー用です。`phpuser`ユーザー用の接続が必要です。


== ウィッシュリスト・データベースへの接続の確立

前の項の最後に、`wishlist`データベースと`root`ユーザーへの接続が作成されました。ここで、`phpuser`ユーザー用に新しい接続を作成します。

1. 「サービス」ウィンドウで、「データベース」ノードを右クリックし、「新規接続」を選択します。新規接続ウィザードが開きます。

image::images/databases-ctxmenu-newconnection.png[]



. 新規接続ウィザードの「ドライバを検索」パネルで、「`MySQL (Connector/J Driver)`」を選択します。「次」をクリックします。「接続をカスタマイズ」パネルが開きます。

image::images/locate-driver.png[]



. 「データベース」フィールドに「`wishlist`」と入力します。


. 「ユーザー名」および「パスワード」編集ボックスで、<<CreateUser,データベースの所有者(ユーザー)の作成>>の項で指定したユーザー名とパスワード(この例ではそれぞれ ``phpuser`` と ``phpuserpw`` )を入力します。「パスワードを保存」を選択します。「接続をテスト」をクリックし、接続が成功したら、「OK」をクリックします。

image::images/phpuser-connection.png[]

対応する新規接続ノードがデータベース・ツリーに表示されます。ここで、`root`ユーザーの`wishlist`データベースへの接続を削除できます。「 ``jdbc:mysql://localhost:3306/wishlist [root on Default schema]`` 」接続をクリックし、「削除」を選択します。

image::images/new-database-connection-added.png[]


== ウィッシュリスト・データベースの構造の設計

必要なデータをすべて準備して格納するには、次の2つの表が必要です。

* 登録済ユーザーの名前とパスワードを格納するwishers表
* ウィッシュの説明を格納するwishes表

image::images/wishlist-db.png[]

wishers表には次の3つのフィールドがあります。

1. ID (id) - ウィッシャの一意のID。このフィールドは主キーとして使用されます。
2. name
3. password

wishes表には次の4つのフィールドがあります。

1. ID (id) - ウィッシュの一意のID。このフィールドは主キーとして使用されます。
2. ウィッシャのID (wisher_id) - ウィッシュが属するウィッシャのID。このフィールドは外部キーとして使用されます。
3. description
4. 期日(due_date) - ウィッシュがリクエストされる日付

表はウィッシャのIDを介して関連付けられます。wishesのdue_date以外のフィールドは、すべて必須です。


== 表の作成

1. データベースに接続するには、 ``jdbc:mysql://localhost:3306/wishlist`` 接続で、マウスの右ボタンをクリックし、コンテキスト・メニューから「接続」を選択します。
NOTE: メニュー項目が無効になっている場合は、すでに接続されています。ステップ2へ進んでください。

[start=2]
. 同じコンテキスト・メニューから「コマンドの実行」を選択します。空の「SQLコマンド」ウィンドウが開きます。

[start=3]
. wishers表を作成するには:


. 次のSQL問合せを入力します(国際化のためには文字セットを明示的にUTF-8に設定する必要があります)。

[source,sql]
----

CREATE TABLE wishers(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL UNIQUE,password CHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL)
----
NOTE: フィールドに「AUTO_INCREMENT」プロパティを指定すると、MySQLから自動生成される一意の番号を取得できます。MySQLは、表の最後の数字を増分して一意の番号を生成し、自動増分フィールドに自動的に追加します。この例では、IDフィールドが自動的に増分されます。


. 問合せでマウスの右ボタンをクリックし、コンテキスト・メニューから「文の実行」を選択します。

NOTE: MySQLのデフォルトのストレージ・エンジンはMyISAMで、外部キーをサポートしません。外部キーを使用する場合、ストレージ・エンジンとしてInnoDBを使用することを検討してください。



. wishes表を作成するには:


. 次のSQL問合せを入力します。

[source,sql]
----

CREATE TABLE wishes(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,wisher_id INT NOT NULL,description CHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,due_date DATE,FOREIGN KEY (wisher_id) REFERENCES wishers(id))
----


. 問合せでマウスの右ボタンをクリックし、コンテキスト・メニューから「文の実行」を選択します。


. 新しい表がデータベースに追加されたことを確認するには、「サービス」ウィンドウに切り替えて、jdbc:mysql://localhost:3306/wishlistの接続ノードに移動します。


. マウスの右ボタンをクリックし、「リフレッシュ」を選択します。「wishers」ノードと「wishes」ノードがツリーに表示されます。

注意: MySQL wishlistデータベースを作成するための一連のSQLコマンドは、link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+ここ+]からダウンロードできます。


== テスト・データの入力

アプリケーションをテストするには、データベース内にいくつかのデータが必要です。以降の例では、2つのウィッシャと4つのウィッシュを追加する方法を示します。



. jdbc:mysql://localhost:3306/wishlistの接続で、マウスの右ボタンをクリックして「コマンドの実行」を選択します。空の「SQLコマンド」ウィンドウが開きます。


. ウィッシャを追加するには、次の例のような構文を使用します。

[source,sql]
----

INSERT INTO wishers (name, password) VALUES ('Tom', 'tomcat');
----
問合せでマウスの右ボタンをクリックし、コンテキスト・メニューから「文の実行」を選択します。
NOTE: 文には ``id`` フィールドの値は含まれていません。フィールドの型が ``AUTO_INCREMENT`` に指定されているので、値は自動的に入力されます。
別のテスト・ウィッシャを入力します。

[source,sql]
----

INSERT INTO wishers (name, password) VALUES ('Jerry', 'jerrymouse');
----


. ウィッシュを追加するには、次の例のような構文を使用します。

[source,sql]
----

INSERT INTO wishes (wisher_id, description, due_date) VALUES (1, 'Sausage', 080401);INSERT INTO wishes (wisher_id, description) VALUES (1, 'Icecream');INSERT INTO wishes (wisher_id, description, due_date) VALUES (2, 'Cheese', 080501);INSERT INTO wishes (wisher_id, description)VALUES (2, 'Candle');
----

問合せを選択し、各問合せでマウスの右ボタンをクリックして、コンテキスト・メニューから「セクションの実行」を選択します。

NOTE: 項目2で説明しているように、問合せを次々に実行することもできます。



. テスト・データを表示するには、関連する表でマウスの右ボタンをクリックし、コンテキスト・メニューから「データを表示」を選択します。

image::images/view-test-data.png[]

データベースの原則とデザイン・パターンの一般的な知識については、チュートリアルlink:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1[+http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1+]を確認してください。

MySQLの ``CREATE TABLE`` 文の構文の詳細は、link:http://dev.mysql.com/doc/refman/5.0/en/create-table.html[+http://dev.mysql.com/doc/refman/5.0/en/create-table.html+]を参照してください。

表への値の挿入の詳細は、link:http://dev.mysql.com/doc/refman/5.0/en/insert.html[+http://dev.mysql.com/doc/refman/5.0/en/insert.html+]を参照してください。

注意: MySQL wishlistデータベースを作成するための一連のSQLコマンドは、link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+ここ+]からダウンロードできます。


== 次の手順

link:wish-list-lesson2.html[+次のレッスン>>+]

link:wish-list-tutorial-main-page.html[+チュートリアルのメイン・ページに戻る+]


link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%201:%20Create%20MySQL%20Database[+ご意見をお寄せください+]


link:../../../community/lists/top.html[+users@php.netbeans.orgメーリング・リストに登録する+]ことによって、NetBeans IDE PHP開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

link:../../trails/php.html[+PHPの学習に戻る+]

