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


[start=3.]
. 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[]


[start=4.]
. 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.

[start=5.]
. 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[]


[start=2.]
. 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[]


[start=3.]
. No campo Banco de Dados, digite `wishlist`.

[start=4.]
. 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.

[start=2.]
. No mesmo menu de contexto, selecione Executar Comando. Uma janela Comando SQL vazia é aberta.

[start=3.]
. Para criar a tabela de wishers,

[start=1.]
. 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.

[start=2.]
. 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.


[start=4.]
. Para criar a tabela de desejos:

[start=1.]
. 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))
----

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

[start=5.]
. 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.

[start=6.]
. 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.


[start=1.]
. 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.

[start=2.]
. 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');
----

[start=3.]
. 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.


[start=4.]
. 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+]

