2. Professor Eduardo Mendes edumendes@gmail.com
Agenda
• Usando Banco de Dados
• Trabalhando com MySQL
• Linguagem SQL
• MySQL e PHP Conexões
• Criação de Consultas
• Seleção de Bancos
• Campos e Result Set
• Formatando o Conteúdo
3. Professor Eduardo Mendes edumendes@gmail.com
Testando Configuração
• Iniciar o EasyPHP
– Iniciar Programas EasyPHP
5. Professor Eduardo Mendes edumendes@gmail.com
Testando Configuração
• Os arquivos serão salvos na pasta www do
EasyPHP
– C:Arquivos de programasEasyPHP1-8www
7. Professor Eduardo Mendes edumendes@gmail.com
O programa mysql
• Iniciar EasyPHP
• C:
• cd Arquivos*
• cd Easy*
• cd mysql
• cd bin
• mysql –u root -p
16. Professor Eduardo Mendes edumendes@gmail.com
No MySQL
CREATE DATABASE modulo3;
USE modulo3;
CREATE TABLE agendaTelefonica (
id INT PRIMARY KEY,
primeiroNome VARCHAR(15),
sobreNome VARCHAR (15),
email VARCHAR(20),
telefone VARCHAR(15)
);
DESCRIBE agendaTelefonica;
17. Professor Eduardo Mendes edumendes@gmail.com
Inserindo Valores
INSERT INTO agendaTelefonica
VALUES(
0, ‘Eduardo', ‘Mendes',
‘eduardo@fa7.edu.br', '123567‘
);
18. Professor Eduardo Mendes edumendes@gmail.com
Recuperando os dados
• Eu quero visualizar todos os registro
de uma tabela
SELECT * FROM nomeDaTabela;
20. Professor Eduardo Mendes edumendes@gmail.com
O programa mysql
• Iniciar EasyPHP
• C:
• cd Arquivos*
• cd Easy*
• cd mysql
• cd bin
• mysql –u root -p
21. Professor Eduardo Mendes edumendes@gmail.com
Conectando-se a um banco de dados
• Na linha de comando
– Nos conectamos ao mysql através de usuário e
senha:
• mysql –u root -p
– Para poder fazer consulta a um banco,
informamos qual o banco através de:
• USE nomeDoBanco
22. Professor Eduardo Mendes edumendes@gmail.com
Conectando-se ao banco via PHP
• Usamos uma função
– mysql_connect()
• Esta função precisa de alguns pârametros
• Precisamos informar o servidor onde está
localizado o banco de dados
– localhost
• Informamos o usuário, exemplo:
– root
• Informamos a senha do usuário:
– 123456
23. Professor Eduardo Mendes edumendes@gmail.com
Juntando tudo
mysql_connect("localhost", "root", "");
O servidorA função O usuário A senha
Guardar o retorno da função em uma variável é opcional
$conexao = mysql_connect("localhost", "root", "");
24. Professor Eduardo Mendes edumendes@gmail.com
Selecionando o banco de dados com PHP
• O “USE” da linha de comando:
mysql_select_db();
• Precisamos informar o nome o banco
– agendaTelefonica
• É opcional informar uma conexão
previamente obtida
– $conexao
25. Professor Eduardo Mendes edumendes@gmail.com
Juntando tudo
mysql_select_db(“agendaTelefonica”);
ou
mysql_select_db(“agendaTelefonica", $conexao);
A função O nome do banco A conexão
28. Professor Eduardo Mendes edumendes@gmail.com
conexao.php
<h1>Conexão</h1>
<? $conexao = mysql_pconnect("localhost", "root", "");
if ($conexao) {
mysql_select_db("agendaTelefonica", $conexao);
print "Conexão realizada com sucesso";
} else {
print "Falha na conexão!";
}
?>
29. Professor Eduardo Mendes edumendes@gmail.com
O programa mysql
• Iniciar EasyPHP
• C:
• cd Arquivos*
• cd Easy*
• cd mysql
• cd bin
• mysql –u root -p
30. Professor Eduardo Mendes edumendes@gmail.com
Inserindo muitos dados
• Baixar o arquivo dados.txt
– http://www.fa7.edu.br/phpparainiciantes/modulo3/dados.zip
• Salvar o arquivo dados.txt na pasta:
– C:Arquivos de programasEasyPHP1-8mysqlbin
– Executar o comando no mysql
– LOAD DATA LOCAL INFILE “dados.txt” INTO
TABLE agendaTelefonica
• SELECT * FROM agendaTelefonica
31. Professor Eduardo Mendes edumendes@gmail.com
Limitando o número de colunas
• Selecionar apenas o nome e o sobrenome de
todas os registros da tabela
SELECT primeironome,sobrenome
FROM agendaTelefonica;
32. Professor Eduardo Mendes edumendes@gmail.com
Adicionando uma condição
WHERE
SELECT nome, sobrenome
FROM agendaTelefonica
WHERE nome=‘Eduardo’;
33. Professor Eduardo Mendes edumendes@gmail.com
WHERE
e operadores de comparação
• WHERE nomeDoCampo = ‘xxxxx’;
• WHERE nomeDoCampo > XXXX;
• WHERE nomeDoCampo < ‘XXXX’;
• WHERE nomeDoCampo >= XXXX;
• WHERE nomeDoCampo <= ‘XXXX’;
34. Professor Eduardo Mendes edumendes@gmail.com
Exemplo
• Eu quero todos os registros da
agendaTelefonica que começam ou com ‘A’,
ou com ‘B’ ou com ‘C’
SELECT *
FROM agendaTelefonica
WHERE primeironome < ‘D’;
35. Professor Eduardo Mendes edumendes@gmail.com
MYSQL e PHP
• Para trabalhar com um banco
– Precisamos nos conectar ao banco
– Como?
mysql_connect("localhost", "root", "");
– Precisamos também selecionar o banco
– Como?
mysql_select_db(“modulo3”);
36. Professor Eduardo Mendes edumendes@gmail.com
No MySQL
• Para fazer uma consulta a uma tabela no
banco, fizemos:
• Deve existir uma formaa de fazer isto no
PHP. Qual?
SELECT primeironome
FROM agendaTelefonica;
37. Professor Eduardo Mendes edumendes@gmail.com
PHP & MySQL
• Primeiro precisamos criar uma consulta em
forma de String
“SELECT nome FROM agendaTelefonica”
• Atribuir esta String a uma variável
$sql = “SELECT nome FROM agendaTelefonica”
• Enviar esta consulta ao banco
• Guardar o resultado da consulta em outra
variável
38. Professor Eduardo Mendes edumendes@gmail.com
PHP & MySQL
• Como enviar a consulta para o banco?
• Esta função precisa de 1 argumento:
– A consulta: “SELECT ...”
mysql_query($sql);
39. Professor Eduardo Mendes edumendes@gmail.com
PHP & MySQL
• Guarde o resultado
$resultado = mysql_query($sql);
• Percorra os resultados com mysql_fetch_assoc
<?
while ($linha = mysql_fetch_assoc($resultado)){
print $linha['nome'] .”<br/>”;
} ?>
44. Professor Eduardo Mendes edumendes@gmail.com
Mais consultas
• Todos os registros da tabela que ‘a’, ‘b’,
‘c’, ‘d’
45. Professor Eduardo Mendes edumendes@gmail.com
Coringa %
• Selecione todos os registros que começam
com a letra ‘A’;
SELECT *
FROM agendaTelefonica
WHERE primeironome LIKE ‘A%’;
46. Professor Eduardo Mendes edumendes@gmail.com
Coringa com limitação de colunas
• Todos os nome e sobrenomes da
agendaTelefonica, que possuam emails
terminados com ‘br’
SELECT nome, sobrenome
FROM agendaTelefonica
WHERE email LIKE ‘%br’;
47. Professor Eduardo Mendes edumendes@gmail.com
Múltiplas condições
SELECT *
FROM agendaTelefonica
WHERE nome LIKE ‘J%’
AND sobrenome LIKE ‘%o%’;
48. Professor Eduardo Mendes edumendes@gmail.com
Inserindo Valores no MySQL
INSERT INTO agendaTelefonica
VALUES(
0, ‘Eduardo', ‘Mendes',
‘eduardo@fa7.edu.br', '123567‘
);
60. Professor Eduardo Mendes edumendes@gmail.com
Altere o php
<?
$conexao = mysql_connect("localhost", "root", "");
mysql_select_db("modulo3", $conexao);
$sql = "SELECT * FROM agendaTelefonica";
if (isset($_POST['nome'])) {
$nome = $_POST['nome'];
$sql = $sql . " WHERE nome LIKE ‘$nome%’ ";
}
$resultado = mysql_query($sql, $conexao);
?>
61. Professor Eduardo Mendes edumendes@gmail.com
O campo de texto antes da tabela
<form method="post">
<p>Pesquisa: <input type="text" name="nome" /></p>
</form>
62. Professor Eduardo Mendes edumendes@gmail.com
Alterando Dados - UPDATE
• Altere o sobrenome para ‘Oliveira’ onde o
nome é igual ‘Eduardo’
UPDATE agendaTelefonica
SET sobrenome=‘Oliveira’
WHERE nome = ‘Eduardo’;
63. Professor Eduardo Mendes edumendes@gmail.com
Excluindo linhas
DELETE
• Delete da tabela agendaTelefonica o
registro de todos os ‘Eduardo’
DELETE FROM agendaTelefonica
WHERE nome = ‘Eduardo’;
64. Professor Eduardo Mendes edumendes@gmail.com
Banco de Dados da FA7
CREATE DATABASE fa7;
USE DATABASE fa7;
65. Professor Eduardo Mendes edumendes@gmail.com
Professor
• Id
• Nome
• Titulação
• Idade
• Disciplina
66. Professor Eduardo Mendes edumendes@gmail.com
Tabela Professor
DROP TABLE IF EXISTS professor;
CREATE TABLE professor (
id INT PRIMARY KEY,
nome VARCHAR(15),
titulacao VARCHAR (15),
idade INT,
disciplina VARCHAR(30)
);
67. Professor Eduardo Mendes edumendes@gmail.com
Inserindo dados
Professor
INSERT INTO professor
VALUES (
0, ‘Fláudio', 'Mestre', 15, ‘Cálculo'
);
INSERT INTO professor
VALUES (
0, ‘Marum', 'Mestre', 10, ‘Sistemas de
Informação'
);
SELECT * FROM professor;
68. Professor Eduardo Mendes edumendes@gmail.com
E se eu quiser mais sobre
Disciplina????
• Carga Horaria
• Curso
70. Professor Eduardo Mendes edumendes@gmail.com
Tabela Disciplina
DROP TABLE IF EXISTS disciplina;
CREATE TABLE disciplina (
id INT PRIMARY KEY,
nome VARCHAR(30),
cargaHoraria INT,
curso VARCHAR(30)
);
71. Professor Eduardo Mendes edumendes@gmail.com
Inserindo dados
Disciplina
INSERT INTO disciplina
VALUES (
0, ‘Cálculo', 80, ‘Sistemas de Informação’
);
INSERT INTO disciplina
VALUES (
0, ‘Sistemas de Informação', 80,
‘Sistemas de Informação’
);
SELECT * FROM disciplina;
73. Professor Eduardo Mendes edumendes@gmail.com
Modificando a estrura
da Tabela
ALTER TABLE professor
MODIFY disciplina INT;
• Alterar os valores dos campos disciplina da tabela
professor para que possa haver a correlação
entre o campo disciplina da tabela professor e o
campo id da tabela disciplina
74. Professor Eduardo Mendes edumendes@gmail.com
Executando um script no PhpMyAdmin
• O que são scripts?
– Instruções formais escritas com linguagens
interpretadas
– Cada instrução de um script é executada sem a
necessidade de se criar um arquivo executável
75. Professor Eduardo Mendes edumendes@gmail.com
Executando um script no PhpMyAdmin
• Um exemplo de script que pode ser salvo
como um arquivo
DROP TABLE IF EXISTS professor;
CREATE TABLE professor (
id INT PRIMARY KEY,
nome VARCHAR(15),
titulacao VARCHAR (15),
idade INT,
disciplina VARCHAR(30)
);
77. Professor Eduardo Mendes edumendes@gmail.com
Executando os scripts para o banco de dados fa7
• Baixe os arquivos
78. Professor Eduardo Mendes edumendes@gmail.com
Verifique o banco fa7 agora
• SELECT * FROM curso;
• SELECT * FROM disciplina;
• SELECT * FROM professor;
79. Professor Eduardo Mendes edumendes@gmail.com
Combinando Tabelas
SELECT *
FROM professor,
disciplina;
81. Professor Eduardo Mendes edumendes@gmail.com
Solução
• Precisamos colocar uma condição na nossa
consulta
SELECT * FROM professor, disciplina
• Para que haja o relacionamento entre as
duas tabelas
82. Professor Eduardo Mendes edumendes@gmail.com
Impondo uma condição
SELECT *
FROM professor, disciplina
WHERE professor.disciplina=
disciplina.id;
83. Professor Eduardo Mendes edumendes@gmail.com
Dando um ‘apelido’
para Tabela
SELECT *
FROM professor p,
disciplina d;
84. Professor Eduardo Mendes edumendes@gmail.com
Apelido == ALIAS
SELECT p.nome,
d.nome
FROM professor p,
disciplina d
WHERE p.disciplina =
d.id;
85. Professor Eduardo Mendes edumendes@gmail.com
Alias para campos
SELECT p.nome as professor,
d.nome as disciplina
FROM professor p,
disciplina d
WHERE p.disciplina = d.id;
87. Professor Eduardo Mendes edumendes@gmail.com
Relacionando tabelas
SELECT *
FROM curso c,
disciplina d
WHERE d.curso = c.id;
88. Professor Eduardo Mendes edumendes@gmail.com
Qual o curso de cada professor?
SELECT c.nome as curso,
p.nome as professor
FROM curso c,
disciplina d,
professor p
WHERE p.disciplina=d.id
AND d.curso=c.id;
89. Professor Eduardo Mendes edumendes@gmail.com
Qual o curso de um professor específico?
SELECT c.nome as curso,
p.nome as professor
FROM curso c,
disciplina d,
professor p
WHERE p.disciplina=d.id
AND d.curso=c.id
AND p.nome=‘Flaudio’;
90. Professor Eduardo Mendes edumendes@gmail.com
Selecionando todos os professores
SELECT nome
FROM professor;
91. Professor Eduardo Mendes edumendes@gmail.com
Selecionando todos os professores
sem repetir nomes
SELECT DISTINCT nome
FROM professor;
92. Professor Eduardo Mendes edumendes@gmail.com
Quantos professores
existem na tabela?
SELECT COUNT(*)
FROM professor;
93. Professor Eduardo Mendes edumendes@gmail.com
Quantos professores
um curso específico possui?
SELECT COUNT(DISTINCT p.nome)
FROM professor p,
disciplina d,
curso c
WHERE p.disciplina=d.id
AND d.curso=c.id
AND c.nome=‘CONTABILIDADE’;
94. Professor Eduardo Mendes edumendes@gmail.com
Quantos professores
cada curso possui?
SELECT COUNT(DISTINCT p.nome),
c.nome
FROM professor p,
disciplina d,
curso c
WHERE p.disciplina=d.id
AND d.curso=c.id
GROUP BY c.nome;
95. Professor Eduardo Mendes edumendes@gmail.com
Consultas
• Selecione os professores e os ordene por
ordem alfabética
• Selecione a quantidade de disciplinas do
curso SISTEMAS DE INFORMACAO
• Selecione a quantidade de disciplinas de
cada Curso
• Selecione a quantidade de disciplinas de
cada professor
96. Professor Eduardo Mendes edumendes@gmail.com
Quantos professores
cada curso possui?
SELECT COUNT(DISTINCT d.nome),
p.nome
FROM professor p,
disciplina d,
curso c
WHERE p.disciplina=d.id
AND d.curso=c.id
GROUP BY p.nome;
97. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
• Cria um array associativo com a linha atual
de um conjunto de resultados
Id 0
primeiroNome Eduardo
sobreNome Mendes
email eduardo@fa7.edu.br
telefone 123-4567
98. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
while ($linha = mysql_fetch_assoc($resultado)) {
?>
<p>O Nome inserido foi: <?= $linha['primeiroNome'] ?></p>
<p>Telefone: <?= $linha['telefone'] ?></p>
<?
}
99. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
• Cria um array normal com a linha atual de
um conjunto de resultados
0 0
1 Eduardo
2 Mendes
3 eduardo@fa7.edu.br
4 123-4567
100. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
while ($linha = mysql_fetch_row($resultado)) {
?>
<p>O Nome inserido foi: <?= $linha[1] ?></p>
<p>Telefone: <?= $linha[4] ?></p>
<?
} 0 0
1 Eduardo
2 Mendes
3 eduardo@fa7.edu.br
4 123-4567
101. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
• Cria tanto o array associativo, quanto o
array numérico
Id 0
primeiroNome Eduardo
sobreNome Mendes
email eduardo@fa7.edu.br
Telefone 123-4567
0 0
1 Eduardo
2 Mendes
3 eduardo@fa7.edu.br
4 123-4567
102. Professor Eduardo Mendes edumendes@gmail.com
Funções no PHP para recuperar resultados
while ($linha = mysql_fetch_array($resultado)) {
?>
<p>O Nome inserido foi: <?= $linha[1] ?></p>
<p>Telefone: <?= $linha[‘telefone’] ?></p>
<?
}
0 0
1 Eduardo
2 Mendes
3 eduardo@fa7.edu.br
4 123-4567
Id 0
primeiroNome Eduardo
sobreNome Mendes
email eduardo@fa7.edu.br
telefone 123-4567
103. Professor Eduardo Mendes edumendes@gmail.com
Percorrendo os resultados
<table>
<?
while ($linha = mysql_fetch_row($resultado)){
?>
<tr>
<?
foreach ($linha as $valor) {
print "<td>$valor</td>n";
}
?>
</tr>
<? } ?>
</table>
104. Professor Eduardo Mendes edumendes@gmail.com
Percorrendo os resultados
<table>
<?
while ($linha = mysql_fetch_assoc($resultado)){
?>
<tr>
<?
foreach ($linha as $valor) {
print "<td>$valor</td>n";
}
?>
</tr>
<? } ?>
</table>
105. Professor Eduardo Mendes edumendes@gmail.com
Percorrendo os resultados
<table>
<?
while ($linha = mysql_fetch_array($resultado)){
?>
<tr>
<?
foreach ($linha as $valor) {
print "<td>$valor</td>n";
}
?>
</tr>
<? } ?>
</table>
106. Professor Eduardo Mendes edumendes@gmail.com
Algumas funções de Strings
• strtoupper
– Converte uma String para maiúsculas
– strtoupper(“abcd”) ABCD
• strtolower
– Converte uma String para minúsculas
– strtolower(“XYWZ”) xywz
• strlen
– Retorna o tamanho de uma String
• Mais funções para String: http://php.net/
strings
109. <?
$con = mysql_pconnect(“localhost”, “root”,””);
mysql_select_db(“jornada”, $con);
$consulta = “SELECT p.*, d.nome as dnome
FROM professor p, disciplina d
WHERE p.disciplina=d.id”;
$resultado = mysql_query($consulta, $con);
Professor Eduardo Mendes edumendes@gmail.com
119. Professor Eduardo Mendes edumendes@gmail.com
O que precisamos?
• Criar e executar uma
consulta para recuperar a
informações de um
professor específico
• Criar e executar uma
consulta para recuperar as
informações de disciplinas
• Fazer com que os campos
apresentem os valores do
professor específico
• Fazer com o que campo
disciplinas apresente os
valores das disciplinas
120. Professor Eduardo Mendes edumendes@gmail.com
Realizando os 4 passos
• Criar e executar uma consulta para
recuperar a informações de um professor
específico
$sql = "SELECT * FROM professor WHERE id=" . $_GET['id'];
$resultado = mysql_query($sql, $conexao);
$professor = mysql_fetch_assoc($resultado);
http://localhost/aplicacao/editarProfessor.php?id=1
121. Professor Eduardo Mendes edumendes@gmail.com
Realizando os 4 passos
• Criar e executar uma consulta para
recuperar as informações de disciplinas
$sql = "SELECT id, nome FROM disciplina";
$disciplinas = mysql_query($sql, $conexao);
122. Professor Eduardo Mendes edumendes@gmail.com
Realizando os 4 passos
• Fazer com que os campos apresentem os
valores do professor específico
<input type="hidden" name="id" value="<?= $professor['id'] ?>" />
<p>Nome:
<input type="text" name="nome" value="<?= $professor['nome'] ?>" />
</p>
123. Professor Eduardo Mendes edumendes@gmail.com
Realizando os 4 passos
• Fazer com o que campo disciplinas
apresente os valores das disciplinas
<select name="disciplina">
<? while($opcoes = mysql_fetch_assoc($disciplinas)) { ?>
<option value="<?= $opcoes['id'] ?>">
<?= $opcoes['nome'] ?></option>
<? } ?>
</select>
124. Professor Eduardo Mendes edumendes@gmail.com
Exercícios
• Criar uma tabela chamada produto
• A tabela possui
– Id: int
– Nome: Varchar(50)
– Preco: int
• Crie uma tela para inserir produtos na
tabela
• Crie uma tela para listar todos os produtos
da tabela
127. Professor Eduardo Mendes edumendes@gmail.com
Uma tabela de usuários
• Id
• Nome
• Login
• Senha
– Quais as características de um login?
128. Professor Eduardo Mendes edumendes@gmail.com
Índices – login
• Chave primária
– Campo na tabela que não se repete
– Serve para identificar uma “tupla” de maneira
única
– A chave primária pode ser identificada como
um campo único ou como um conjunto de campos
• Índices únicos
– Determinados campos podem ter necessidades
especiais
– Alguns campos não deveriam se repetir
138. Professor Eduardo Mendes edumendes@gmail.com
Criar um link para editarCurso
• Como poderíamos criar
um link para editar o
curso?
• Que link seria esse?
139. Professor Eduardo Mendes edumendes@gmail.com
O link
• Destino
– editarCurso.php
• Informando o curso a ser editado
– editarCurso.php?id=1
• O link
<a href='editarCurso.php?id=<?= $row['id'] ?>'> <?= $row['nome'] ?> </a>
140. Professor Eduardo Mendes edumendes@gmail.com
Adicionando o link
<tr>
<td><?= $row['id'] ?></td>
<td>
<a href='editarCurso.php?id=<?= $row['id'] ?>'>
<?= $row['nome'] ?>
</a>
</td>
</tr>
161. Professor Eduardo Mendes edumendes@gmail.com
O que precisamos fazer?
• Determinar se esta
página vai alterar ou
criar um novo curso
• Como?
– Pela forma como foi
acessada
163. Professor Eduardo Mendes edumendes@gmail.com
O que precisamos fazer?
• Precisamos criar uma
variável para mostrar
qual ação deve ser
realizada
– $acao
– Inicialmente ela vai
possuir o valor “inserir”
– Caso a ação seja
alterar, mudamos para o
valor “alterar”
168. Professor Eduardo Mendes edumendes@gmail.com
O que foi visto?
• Introdução Banco de Dados
– Linhas
– Tabelas
– Colunas
– Registros
– Chave Primária
– Chave Estrangeira
– Relacionamento entre tabelas
– Índices
• MySQL
– O cliente mysql.exe
• Conexão via linha de comando
– PhpMyAdmin
• Linguagem SQL
– Linguagem de Modelagem de
dados
• CREATE, USE, ALTER, LOAD
DATA
• Conectando o MySQL com
funções PHP
– mysql_connect(),
mysql_pconnect(),
mysql_select_db(),
– Consultas
– Linguagem de Consulta
• SELECT, UPDATE, DELETE,
INSERT
• WHERE, AND, OR, ORDER BY,
LIKE, DISTINCT, COUNT,
GROUP BY
• mysql_query(),
mysql_fetch_assoc(),
mysql_fetch_array(),
mysql_row(),
mysql_fetch_field()
• Conjunto de Resultados
• Formatando o conteúdo
– Criação de CRUD