// 
//     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

В данном уроке описывается последний подготовительный этап разработки приложения "Wish List" ("Список желаний") в рамках создания демонстрационной базы данных с тестовыми данными. Для выполнения всех этапов, предложенных в данном руководстве, необходима база данных, которая позволит сохранять данные (желания), введенные пользователями. IDE NetBeans позволяет выполнять все эти действия с помощью интерфейса IDE. 
Перед началом работы ознакомьтесь с требованиями, описанными в разделе link:wish-list-tutorial-main-page.html[+Создание приложения типа CRUD на языке PHP – главная страница+].

Текущий документ является частью краткого учебного курса "Создание приложения CRUD в IDE NetBeans для PHP".



[[register-mysql]]
== Регистрация сервера MySQL

Если в IDE еще не зарегистрирован сервер баз данных MySQL или вам требуется общая информация об использовании MySQL в IDE NetBeans, см. раздел link:../ide/mysql.html[+Подключение к базе данных MySQL+].


== Создание пользователя базы данных

Перед созданием базы данных необходимо создать соответствующего пользователя, которому будет предоставлено право на выполнение любых операций в базе данных. Создание пользователя базы данных включает в себя следующие действия:

* <<connectToMySQLServer,Подключение к серверу MySQL пользователя с ролью root>>.
* <<connectToDefaultDatabase,Подключение к базе данных системы MySQL пользователя с ролью root>>. Поскольку выполнение команды SQL невозможно без подключения к какой-либо базе данных, это действие позволяет запустить команду SQL, необходимую для создания пользователя.
* <<createUserQuery,Выполнение оператора создания пользователя в MySQL>>.

1. Запустите IDE, перейдите в окно 'Службы' (Ctrl-5) и разверните узел 'Базы данных'.
2. Для 
подключения к серверу базы данных MySQL перейдите к узлу  ``MySQL Server``  и выберите "Connect" в контекстном меню. 

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



. IDE NetBeans устанавливает соединение с сервером MySQL, проверяет наличие доступных баз данных с помощью сервера, обнаруживает системную базу данных  ``mysql``  и добавляет соответствующий новый узел  ``mysql``  к дереву баз данных. 

image::images/mysql_node_added.png[]



. Для выполнения команды SQL необходимо подключение к базе данных. Поскольку доступна только система MySQL, следует подключиться к этой системе. 
Для подключения к системной базе данных перейдите к узлу  ``mysql``  и выберите "Connect" в контекстном меню. Если подключение на данный момент отсутствует, появится диалоговое окно "New Database Connection". В поле "User Name" по умолчанию вводится значение "root". В поле "Password" введите пароль пользователя root.

NOTE: Если вы уже подключались к базе данных `mysql`, это диалоговое окно не отобразится. Вместо этого в дереве просто появится новый узел подключения.

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

В диалоговом окне "New Database Connection" появится сообщение "Connection established". Нажмите кнопку "ОК". К дереву баз данных добавлен новый узел с именем  ``jdbc:mysql://localhost:3306/mysql`` .


. Перейдите к узлу  ``jdbc:mysql://localhost:3306/mysql``  и выберите в контекстном меню "Execute Command". 

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

Откроется окно "SQL Command". В окне "SQL Command" введите следующие команды:

[source,sql]
----

CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'phpuserpw'
----
Выберите в контекстном меню "Run Statement". Если команда выполнена успешно, в строке состояния выводится следующее сообщение: "SQL Statement(s) executed successfully". Если выводится другое сообщение, проверьте синтаксическую правильность введенных команд и выполните советы, относящиеся к данному сообщению.


== Создание базы данных Wishlist

Для создания базы данных выполните следующие действия:

1. Перейдите к узлу  ``MySQL Server at localhost:3306``  и выберите из контекстного меню "Create Database". Появится диалоговое окно "Create MySQL Database". Заполните поля следующим образом:
* В поле имени "Database Name" введите "wishlist".
* Установите флажок "Grant full access to user" и выберите в раскрывающемся списке  ``phpuser@localhost`` . Нажмите кнопку "OK".

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

Функция "Grant full access to user", предоставляющая пользователю полные права доступа, срабатывает не всегда. Если она не работает, <<EstablishConnection,подключитесь к базе данных>> как пользователь root и отправьте запрос SQL [examplecode]# ``GRANT ALL ON wishlist.* TO phpuser@localhost`` #.

Подключение к базе данных появится в дереве. Однако это подключение создано для пользователя `root`. Вам требуется подключение для пользователя ` phpuser`.


== Установление подключения к базе данных Wishlist

На предыдущем этапе вы создали базу данных `wishlist` с подключением для пользователя `root`. Теперь необходимо создать подключение для пользователя `phpuser`.

1. В окне 'Службы' щелкните правой кнопкой мыши узел 'Базы данных' и выберите 'Создать подключение'. Открывается мастер создания подключений.

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



. На панели 'Обнаружение драйвера' в мастере создания подключений выберите `MySQL (Connector/J Driver).` Нажмите 'Далее'. Открывается панель 'Настройка соединения'.

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



. В поле 'База данных' введите `wishlist`.


. В полях "User Name" и "Password" введите соответственно имя и пароль пользователя, указанные в разделе <<CreateUser,Создание владельца (пользователя) базы данных>> (в нашем примере это  ``phpuser``  и  ``phpuserpw`` ). Установите флажок 'Запомнить пароль'. Нажмите 'Проверить подключение'. Если соединение установлено успешно, нажмите "OK". 

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

В дереве баз данных будет отображаться соответствующий новый узел подключения. Подключение для пользователя `root` к базе данных `wishlist` можно удалить. Нажмите на подключение  ``jdbc:mysql://localhost:3306/wishlist [корневой элемент в схеме по умолчанию]``  и выберите 'Удалить'.

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


== Проектирование структуры базы данных Wishlist

Для размещения и сохранения всех необходимых данных требуются две таблицы:

* таблица "wishers" для сохранения имен и паролей зарегистрированных пользователей;
* таблица "wishes", которая будет содержать описания требований.

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

Таблица "wishers" содержит три поля:

1. "id" – уникальный идентификатор пользователя. Это поле используется в качестве первичного ключа.
2. "name" – имя
3. "password" – пароль

Таблица "wishes" содержит четыре поля:

1. "id" – уникальный идентификатор пользователя. Это поле используется в качестве первичного ключа.
2. "wisher_id" – идентификатор пользователя, оставившего пожелание. Это поле используется в качестве внешнего ключа.
3. "description"– описание
4. "due_date" – требуемая дата исполнения пожелания.

Таблицы связаны посредством идентификатора пользователя. Все поля таблицы "wishes" являются обязательными для заполнения, за исключением "due_date".


== Создание таблиц

1. Для подключения к базе данных щелкните правой кнопкой мыши узел подключения  ``jdbc:mysql://localhost:3306/wishlist``  и выберите "Connect" в контекстном меню.
NOTE:  Если пункт меню недоступен, пользователь уже подключен. Перейдите к действию 2.


. В том же контекстном меню выберите "Execute Command". Откроется пустое окно "SQL Command".


. Для создания таблицы "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:  Можно получить уникальный номер, автоматически создаваемый MySQL, задав свойство AUTO_INCREMENT для поля. MySQL создаст уникальный номер посредством увеличения на единицу последнего номера в таблице и автоматически добавит его к значению поля с этим свойством. В нашем примере автоматически должно увеличиваться значение в поле "ID".


. Щелкните запрос правой кнопкой мыши, затем выберите "Run Statement" в контекстном меню.

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))
----


. Щелкните запрос правой кнопкой мыши, затем выберите "Run Statement" в контекстном меню.


. Для проверки того, что новые таблицы добавлены к базе данных, перейдите к окну "Services", а затем к узлу подключения jdbc:mysql://localhost:3306/wishlist.


. Нажмите правую кнопку мыши и выберите "Refresh". В дереве появятся узлы "wishers" и "wishes".

Примечание. Набор команд SQL для создания базы данных wishlist MySQL можно загрузить link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+здесь+].


== Ввод тестовых данных

Для тестирования приложения необходимо наличие некоторых данных в базе данных. В приведенном ниже примере показано, каким образом можно добавить данные для двух пользователей и четырех желаний.

1. В узле подключения jdbc:mysql://localhost:3306/wishlist щелкните правой кнопкой мыши и выберите "Execute Command". Откроется пустое окно "SQL Command".
2. Для добавления данных пользователя введите следующие команды:

[source,sql]
----

INSERT INTO wishers (name, password) VALUES ('Tom', 'tomcat');
----
Щелкните запрос правой кнопкой мыши и выберите из контекстного меню "Run Statement".
NOTE: . Оператор не содержит значения для поля  ``идентификатора`` . Значения вводятся автоматически, поскольку указан тип поля  ``AUTO_INCREMENT`` .
Введите данные другого тестового пользователя:

[source,sql]
----

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


. Для добавления пожеланий ("wishes") введите следующие команды:

[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');
----

Выберите запросы, щелкните каждый правой кнопкой мыши по каждому из них и выберите "Run Selection" в контекстном меню.

NOTE:  Также можно выполнять запросы один за другим, как описано в пункте 2.



. Для просмотра тестовых данных щелкните соответствующую таблицу правой кнопкой мыши и выберите из контекстного меню "View Data". 

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+].

Примечание. Набор команд SQL для создания базы данных wishlist MySQL можно загрузить 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[+Мы ждем ваших отзывов+]


Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с PHP IDE NetBeans link:../../../community/lists/top.html[+присоединяйтесь к списку рассылки users@php.netbeans.org+].

link:../../trails/php.html[+Возврат к учебной карте PHP+]

