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

= Criando uma Aplicação Orientada pelo Banco de Dados com o PHP
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando uma Aplicação Orientada pelo Banco de Dados com o PHP

Esta lição descreve a última etapa preliminar no desenvolvimento da aplicação da Lista de Desejos: a criação de um banco de dados de amostra com dados de teste. Para concluir as etapas deste tutorial, você precisará de um banco de dados para armazenar os dados dos wishers. Com o NetBeans IDE, você pode realizar todas essas atividades usando a interface do IDE. 
Antes de começar, veja os requisitos do tutorial descritos em link:wish-list-tutorial-main-page.html[+Criando uma Aplicação CRUD com PHP - Página Principal+].

O documento atual é uma parte do tutorial Criando uma Aplicação CRUD no NetBeans IDE para PHP.



[[register-mysql]]
== Registrando um Servidor MySQL

Se você não tiver um servidor de banco de dados MySQL registrado no IDE ou quiser informações gerais sobre como usar MySQL com o NetBeans IDE, consulte link:../ide/mysql.html[+Estabelecendo Conexão com um Banco de Dados MySQL+].


== Criando o Usuário do Banco de Dados

Antes de criar um banco de dados, você precisa criar o usuário que terá o direito de realizar todas as operações no banco de dados. A Criação de um Usuário de Banco de Dados envolve:

* <<connectToMySQLServer,Conectar ao servidor MySQL como o usuário raiz>>.
* <<connectToDefaultDatabase,Conectar ao banco de dados do sistema MySQL como um usuário raiz>>. Esta etapa é necessária para permitir a execução de um comando SQL para a criação de um usuário porque não é possível executar um comando SQL sem estar conectado a um banco de dados.
* <<createUserQuery,Executando um comando MySQL de criação de usuário>>.

1. Inicie o IDE, alterne para a janela Serviços (Ctrl-5) e expanda o nó do Banco de Dados.
2. Para 
conectar ao servidor de banco de dados MySQL, navegue para o nó do  ``Servidor MySQL``  e, do menu de contexto, selecione Conectar. 

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



. O NetBeans IDE conecta-se ao servidor MySQL, verifica quais bancos de dados estão disponíveis pelo servidor, detecta o banco de dados do sistema  ``mysql`` , e adiciona o novo nó correspondente  ``mysql``  na árvore Bancos de Dados. 

image::images/mysql_node_added.png[]



. Para executar um comando SQL, você precisa estar conectado a um banco de dados. Como somente o sistema MySQL está disponível, você precisa se conectar ao mesmo. 
Para conectar ao banco de dados do sistema, navegue até o nó  ``mysql``  e, no menu de contexto, selecione Conectar. Se uma conexão ainda não existir, a caixa de diálogo Nova Conexão de Banco de Dados será exibida. O campo Nome do Usuário está preenchido, por default, com raiz. No campo Senha, insira a senha do usuário raiz.

NOTE: se você estabeleceu conexão ao banco de dados `mysql` antes, esta caixa de diálogo não aparecerá. Em vez disso, o novo nó de conexão simplesmente aparece na árvore.

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

A caixa de diálogo Nova Conexão de Banco de Dados mostra a mensagem "Conexão estabelecida". Clique em OK. Um novo nó chamado  ``jdbc:mysql://localhost:3306/mysql``  é adicionado na árvore do Bancos de Dados.


. Navegue até o nó  ``jdbc:mysql://localhost:3306/mysql``  e no menu de contexto selecione Executar Comando. 

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

Uma janela de Comando SQL é aberta. Na janela Comando SQL, use uma sintaxe similar à seguinte instrução:

[source,sql]
----

CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'phpuserpw'
----
No menu de contexto, selecione Executar Instrução. Se o comando for executado com êxito, a barra de Status exibirá a mensagem: "Instrução(ões) SQL executada(s) com êxito". Se outra mensagem for exibida, verifique a sintaxe e siga as dicas da mensagem.


== Criando um Banco de Dados da Lista de Desejos

Para criar o banco de dados:

1. Navegue para o nó  ``Servidor MySQL em localhost:3306``  e, no menu de contexto, selecione Criar Banco de Dados. A caixa de diálogo Criar Banco de Dados MySQL é exibida. Preencha os campos:
* No campo Nome do Banco de Dados, insira a lista de desejos.
* Ative a caixa de seleção Conceder acesso total ao usuário e, na lista drop-down, selecione  ``phpuser@localhost`` . Clique em OK.

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

A função “Conceder acesso total ao usuário” nem sempre funciona. Caso não funcione, <<EstablishConnection,conecte-se ao banco de dados>> como usuário raiz e envie a consulta SQL [examplecode]# ``GRANT ALL ON wishlist.* TO phpuser@localhost`` #.

Uma conexão ao banco de dados é exibida na árvore. No entanto, a conexão é para o usuário `raiz`. Você precisa de uma conexão para o usuário`phpuser`.


== Estabelecendo uma Conexão com o Banco de Dados da Lista de Desejos

No fim da seção anterior, você criou o banco de dados `wishlist` com uma conexão ao usuário `raiz`. Agora você cria uma nova conexão para o usuário `phpuser`.

1. Na janela Serviços, clique com o botão direito do mouse no nó Bancos de Dados e selecione Nova Conexão. O Assistente Nova Conexão será aberto.

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



. No painel Novo Driver de Localização do Assistente de Conexão, selecione o `MySQL (Driver Conector/J).` Clique em Próximo. O painel Personalizar Conexão é aberto.

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



. No campo Banco de Dados, digite `wishlist`.


. Nas caixas de edição Nome do Usuário e Senha, insira o nome e a senha especificados na seção <<CreateUser,Criando o Proprietário (Usuário) do Banco de Dados>> (em nosso exemplo  ``phpuser``  e  ``!phpuser``  respectivamente). Marque Lembrar Senha. Clique em Testar Conexão e se a conexão for bem-sucedida, clique em OK. 

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

O nó correspondente à nova conexão é exibido na árvore do Bancos de Dados. Agora você pode deletar a conexão do usuário `raiz` para o banco de dados `wishlist`. Clique na conexão  ``jdbc:mysql://localhost:3306/wishlist [raiz no esquema Default]``  e escolha Deletar.

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


== Criando a Estrutura do Banco de Dados da Lista de Desejos

Para organizar e armazenar todos os dados necessários, você precisa de duas tabelas:

* Uma tabela de wishers para armazenar nomes e senhas de usuários registrados
* Uma tabela de desejos para armazenar descrições de desejos

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

A tabela de wishers contém três campos:

1. id - a identificação exclusiva de um wisher. Este campo é usado como a Chave Primária
2. nome
3. senha

A tabela de desejos contém quatro campos:

1. id - a identificação exclusiva de um desejo. O campo é usado como a Chave Primária
2. wisher_id - a identificação do wisher a quem o desejo pertence. O campo é usado como a Chave Estrangeira.
3. descrição
4. due_date - a data para a qual o desejo foi solicitado

As tabelas são relacionadas por meio do wisher ID. Todos os campos são obrigatórios, exceto due_date em desejos.


== Criando as Tabelas

1. Para conectar ao banco de dados, na conexão  ``jdbc:mysql://localhost:3306/wishlist`` , clique com o botão direito do mouse e selecione Conectar no menu de contexto.
NOTE:  se o item de menu estiver desativado, você já está conectado. Prossiga com a etapa 2.


. No mesmo menu de contexto, selecione Executar Comando. Uma janela Comando SQL vazia é aberta.


. Para criar a tabela de wishers,


. Digite a seguinte Consulta SQL (observe que é preciso definir explicitamente os conjuntos de caracteres como URF-8 para internacionalização):

[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:  você pode obter um número exclusivo gerado automaticamente do MySQL especificando a propriedade AUTO_INCREMENT de um campo. O MySQL irá gerar um número exclusivo incrementando o último número da tabela e adicionará automaticamente ao campo incrementado. No nosso exemplo, o campo ID é incrementado automaticamente.


. Clique com o botão direito do mouse na consulta e selecione Executar Instrução no menu de contexto.

NOTE: O mecanismo de armazenamento default do MySQL é o MyISAM, que não é compatível com teclas estrangeiras. Caso deseje usar teclas estrangeiras, considere usar InnoDB como mecanismo de armazenamento.



. Para criar a tabela de desejos:


. Digite a seguinte consulta 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))
----


. Clique com o botão direito do mouse na consulta e selecione Executar Instrução no menu de contexto.


. Para verificar se as novas tabelas foram adicionadas ao banco de dados, alterne para a janela Serviços e navegue para o nó da conexão jdbc:mysql://localhost:3306/wishlist.


. Clique com o botão direito do mouse e selecione Atualizar. Os nós de wishers e desejos aparecem na árvore.

Observação: você pode fazer download de um conjunto de comandos SQL para criar link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+aqui+] o banco de dados da lista de desejos MySQL.


== Inserindo os Dados de Teste

Para testar a aplicação, você precisará de alguns dados no banco de dados. O exemplo abaixo mostra como adicionar dois wishers e quatro desejos.



. Na conexão jdbc:mysql://localhost:3306/wishlist, clique com o botão direito do mouse e selecione Executar Comando. Uma janela Comando SQL vazia é aberta.


. Para adicionar um wisher, use uma sintaxe similar ao exemplo abaixo:

[source,sql]
----

INSERT INTO wishers (name, password) VALUES ('Tom', 'tomcat');
----
Clique com o botão direito do mouse na consulta e, no menu de contexto, selecione Executar Instrução.
NOTE:  a instrução não contém um valor para o campo  ``id`` . Os valores são inseridos automaticamente porque o tipo de campo é especificado como  ``AUTO_INCREMENT`` .
Inserir outro wisher de teste:

[source,sql]
----

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


. Para adicionar os desejos, use uma sintaxe similar ao exemplo abaixo:

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

Selecione as consultas, clique com o botão direito do mouse em cada consulta e, no menu de contexto, selecione Executar Seleção.

NOTE:  você também pode executar as consultas uma após a outra, conforme descrito no item 2.



. Para visualizar os dados de teste, clique com o botão direito do mouse na tabela relevante e, no menu de contexto, selecione Exibir dados. 

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

Para obter um entendimento geral dos princípios de bancos de dados e padrões de design, consulte o tutorial: link:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1[+http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1+].

Para obter mais informações sobre a sintaxe das instruções  ``CREATE TABLE``  de MySQL, consulte 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+].

Para obter mais informações sobre como inserir valores na tabela, consulte link:http://dev.mysql.com/doc/refman/5.0/en/insert.html[+http://dev.mysql.com/doc/refman/5.0/en/insert.html+].

Observação: você pode fazer download de um conjunto de comandos SQL para criar link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-MySQL.zip[+aqui+] o banco de dados da lista de desejos MySQL.


== Próxima Etapa

link:wish-list-lesson2.html[+Próxima Lição >>+]

link:wish-list-tutorial-main-page.html[+Voltar à página principal do Tutorial+]


link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%201:%20Create%20MySQL%20Database[+Envie-nos Seu Feedback+]


Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, link:../../../community/lists/top.html[+junte-se à lista de correspondência users@php.netbeans.org+].

link:../../trails/php.html[+Voltar à Trilha de Aprendizado PHP+]

