Utilizando Php e Mysql
Nasair Júnior da Silva nasair@solis.coop.br
Conteúdo
Objetivos O que é SQL/MySql O ambiente MySql A linguagem SQL O que é PHP Utilização da LinguagemConexão com Banco de Dados Exemplos
Objetivos do curso
Conhecer o PHP
Conhecer a linguagem SQL
Conhecer as funções de conexão e interação com banco de dados Mysql, utilizando a linguagem PHP
Exercitar o uso das funções PHP e linguagem SQL
O que é SQL/MySql
SQL é um padrão de linguagem a ser utilizado por sistemas de banco de dados, para gerenciamento e armazenamento de dados.
MySQL é um servidor de banco de dados SQL multi-usuário e permite múltiplos acessos simultâneos.
MySQL é uma implementação cliente-servidor.
Manipula um número ilimitado de usuários
simultâneos;
Alta velocidade de execução;
Trabalha com diferentes plataformas: Unix, Windows etc.;
O que é SQL/MySql (2)
Disponibiliza diversos tipos de dados: INT ,
FLOAT, DOUBLE, CHAR, VARCHAR, TEXT,
BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET e ENUM;
Alta velocidade na execução de joins usando multi-join otimizado;
Suporte completo a operadores e funções nas cláusulas SELECT e WHERE;
Suporte às cláusulas GROUP BY e ORDER BY e a funções de grupo (COUNT(), AVG(), STD(),
O que é SQL/MySql (3)
Suporte a LEFT OUTER JOIN com a sintaxe ANSI SQL e ODBC;
Sistema de privilégios flexível, simples, eficiente e seguro.
Tabelas de disco sob a forma B-tree rápidas com compressão de índices;
Permite 16 índices por tabela;
Escrita em C e C++. Testada com diferentes compiladores;
Possui um sistema de alocação de memória extremamente rápido;
O que é SQL/MySql (4)
DELETE, INSERT, REPLACE e UPDATE
devolvem o número de linhas afetadas pelo comando;
Nomes de funções não entram em conflito com nomes de tabelas ou colunas;
Algumas novas funcionalidades: Gatilhos (triggers)
Stored procedures Visões (views)
Joins otimizados, ... http://www.mysql.com
Histórico do MySql
1979: Unireg: Monty Widelious criou o Unireg, um banco de dados não-SQL para grandes
tabelas
1994: Monty iniciou o desenvolvimento de um SGBD baseado no Unireg; API baseado no mSQL, um gerenciado open source (não era muito bom para grandes tabelas)
1996: Mysql 3.11.1 lançado em binário para Linux e Solaris
Tipos de dados do MySql
CHAR(M): strings de tamanho fixo entre 1 e 255 caracteres
VARCHAR(M): strings de tamanho flexível entre 1 e 255 caracteres
INT(M): números inteiros entre -2147483648 e 2147483647
FLOAT [(M,D)]: números decimais com D casas decimais
DATE: armazena informação relativa a datas. O formato default é 'YYYY-MM-DD'
Tipos de dados do MySql(2)
TEXT/BLOB: strings entre 255 e 65535
caracteres. A diferença entre TEXT e BLOB é que no primeiro o texto não é sensível ao caso e no segundo sim
SET: conjunto de valores strings
ENUM: conjunto de valores strings, difere do SET pois só são armazenados valores
Especificação de colunas
Primary Key (Chave Primária): usada para diferenciar um registro do outro. Cada
registro, desta forma, não pode ter a mesma chave primária
Foreign Key (Chave Estrangeira): usada para relacionar uma coluna de uma tabela com a coluna de outra tabela
Auto_increment: uma coluna com esta opção é automaticamente incrementada quando da inserção de um registro
NOT NULL: não permite a inserção de valores nulos
Sistema de Privilégios
A tabela host determina quais os hosts que estão habilitados a acessar o servidor MySQL
A tabela user determina os usuários que podem acessar o servidor e suas senhas de
identificação a partir de um host
A tabela db contém as informações relativas a qual banco de dados um usuário de um certo host pode acessar
O Ambiente MySQL
Para acessar o ambiente mysql
#mysql h host u username p databasename
Para criar um banco de dados
mysql> create database NomeDoBanco;
Para utilizar o banco recém criado: mysql> use NomeDoBanco
Iniciando...
Visualizar todos os bancos de dados mysql> show databases;
Visualizar as tabelas do banco atual mysql> show tables;
Visualizar os campos de uma tabela
mysql> show fields from NomeDaTabela; ou:
Criando uma tabela
Mysql>CREATE TABLE empresas ( codigo integer auto_increment, nome varchar(50),
primary key(codigo)) type=innodb;// Mysql>CREATE TABLE pessoas (
codigo integer auto_increment,
nome varchar(50), empresa integer, salario real, primary key(codigo),
foreign key(empresa) references empresas (codigo)) type=innodb;//
Inserindo valores
INSERT INTO empresas ( nome) VALUES ('Solis'),('Unisinos'),('Univates'),('Governo FEDERAL');//
INSERT INTO pessoas (nome, empresa, salario) VALUES ('Nasair Silva',1,100),('Joice',1,200), ('Daniel',1,300),('Leonardo',2,400),
('Andréa','2',500),('Cesar',3,600),
('Viviane',3,700),('Roberto Jefferson',4,3000), ('Luis Inácio',4,5000);//
INSERT INTO pessoas(nome, empresa, salario) VALUES ('Frederico',10,1000);
Alterando uma tabela
mysql>desc pessoas;
mysql>alter table pessoas add data_nascimento date;
mysql>alter table pessoas add telefone int; mysql>alter table pessoas drop telefone;
mysql>alter table pessoas add telefone varchar (10);
mysql>alter table pessoas modify telefone varchar(15);
mysql>alter table pessoas change telefone fone varchar(15);
Exibindo, Apagando, Alterando
mysql>SELECT * FROM pessoas;
mysql>DELETE FROM pessoas WHERE codigo=8;
mysql>UPDATE pessoas SET salario=6000 WHERE codigo=9;
mysql>SELECT nome, salario FROM pessoas; mysql>UPDATE pessoas SET salario = 500
WHERE salario < 500;
mysql>DELETE FROM pessoas WHERE salario >5000;
Criando usuários
mysql> insert into mysql.user (Host, User,
Password) values ('localhost', 'aluno', password ('teste123'));
mysql> flush privileges;
mysql> grant all privileges on curso.* to aluno@localhost identified by 'teste123'; mysql> revoke DELETE on curso.* FROM
aluno@localhost;
● ALTER, CREATE, DELETE, DROP, SELECT,
Apagando banco e tabela
mysql>drop table teste;
Query OK, 0 rows affected (0.00 sec) mysql>show tables;
mysql>drop database teste;
Query OK, 0 rows affected (0.00 sec) mysql>show databases;
O que é PHP
oficialmente "PHP: Hypertext Preprocessor"
PHP é uma linguagem de script no lado do servidor (server-side) embutida no HTML, portanto é necessário instalar o interpretador da linguagem no servidor de Web.
Pode ser utilizada como script local
Extensão php-gtk para programação local Site: http://br.php.net
O que o PHP pode fazer ?
Tudo o que outras linguagens fazem...
● Coleta dados e gera formulários dinâmicos ● Conversa de forma nativa com uma ampla
variedade de Bancos de Dados
● Tem acesso a protocolos como IMAP, SNMP,
NNTP, POP3, HTTP...
Histórico do PHP
Criada em 1994 por Rasmus Lerdorf
Em 1995 a primeira versão utilizada por outras pessoas chamada Personal Home Page Tools Ainda em 1995 o interpretador é reescrito e
chamado PHP/FI, esta é a versão 2.
Em 1997, com um time de desenvolvedores surge a versão 3.
Em seguida a versão 4, muito mais rebusta. Versão 5, com várias alterações e melhorias
Primeiros Passos
Tags que identificam o PHP <?php codigo; ?> <? codigo; ?> <script language=”php”> codigo; </script>
Verificando a instalação
<?php
phpinfo(); ?>
Olá, Mundo
echo, print: Ecreve um output na tela echo('Olá Mundo!');
// : Comentário de uma linha // Isto é um comentário
/* */ : Bloco de comentário /* Isto é
Exemplo - exemplo1.php
<HTML><HEAD>
<TITLE>Script de exemplo</TITLE> </HEAD>
<BODY>
<CENTER>Bem-vindo ao script de exemplo:</CENTER> <?
$hoje = date("d-m-Y");
echo "<BR><BR>Hoje é: $hoje."; ?>
</BODY> </HTML>
Variáveis
Os tipos de variáveis mais usados são: Caractere: 'a', 'b', 'Z'
Inteiro: 0, 1, 2
String: "PHP É legal!" Real/Flutuante: 15.5
Iniciam SEMPRE com o caracter $ Não é necessário declaração
Operadores
+ Adição - Subtração * Multiplicação / Divisão . Concatenação = Atribuição simples+= Atribuição com adição % Resto da divisão
Operadores(2)
-= Atribuição com subtração += Atribuição com adição
*= Atribuição com multiplicação /= Atribuição com divisão
.= Atribuição com concatenação == Igual a
Operadores(3)
=== Igual e mesmo tipo
!== Conteúdo e tipo diferente < Menor que > Maior que <= Menor ou igual a >= Maior ou igual ++ Incremento -- Decremento
Arrays ou Matrizes
podem ser vistos como:
uma forma de lista indexada de variáveis (array unidimensional),
como uma tabela (array bidimensional)
podem conter qualquer tipo de dados (caractere, inteiro, decimal, string)
Inicialização
$produto[0]="Batatas"; ou
Variáveis especiais
$_GET: valores recebidos pela URL ou por formulário, com método GET
$_POST: valores recebidos via formulário, via método POST
$_REQUEST: combinação do $_GET e $_REQUEST
$_SERVER: contém valores de configuração do servidor
$_COOKIE: contém cookies registrados $_SESSION: contém sessões registradas
Exemplo - exemplo2.php
Utilizar a seguinte url:
/exemplo2.php?nome=Nasair&idade=18
<?php
echo “Nome Informado: “.$_GET['nome']; echo “<br />Idade: “.$_GET['idade'];
Transformação de tipos
$a = 10; # $a é um inteiro
$b = (double) $a; # $b é um double
(int), (integer) Converte para inteiro (real),(double),(float) Converte para double
(string) Converte para string
(array) Converte para array
Condicionais
se "tenho dinheiro" "Vou ao Cinema" se "chover" "Fico em casa" senão "Vou à praia" if($dinheiro > 0)echo “Vou ao cinema”;
if($chuva)
echo “Fico em casa”; else
Exercício
Criar um arquivo que receba a variável idade pela url e imprima:
se a idade for maior ou igual a 21: “Maior de idade – civil”
se a idade for maior ou igual a 18: “Maior de idade – penal”
se a idade for menor que 18: “Menor de idade”
Laços de repetição
Enquanto(“Não tiver 60 anos”) “Não paro de trabalhar” Enquando(“Há dados na tabela”)“Exiba estes dados” Comece na primeira
pessoa e pare na 30a, sempre Exibindo os dados de cada uma
while($idade < 60) trabalha_Peao(); While(LedadosTabela()) echo $dados; For($i=1; $i<=30;$i++) echo $dados;
Condicionais(2)
Caso Mês For 1 Caso Mês for 2
então é “Janeiro”; então é “Fevereiro”; ...
swith($mes) {
case '1': echo “Janeiro”; break; case '2': echo “Fevereiro”; break; }
Funções
É um bloco de código que se declara para que possa usar-se sempre que for necessário
Podem retornar valores através do comando RETURN
Podem receber parâmetros por valor e por referência (acrescenta-se & na frente da variável).
Funções(2)
Function mesExtenso($mes) {
switch($mes) {
case '1': return “Janeiro”; case '2': return “Fevereiro”; }
Formulários
Quando é feito um submit de um formulário para um script PHP, o PHP é capaz de entender o
que lhe é enviado, e transformar um formulário num conjunto de variáveis com a informação
enviada
<form action="verifica.php">
Digite o seu nome: <input type=text name=nome /><br /> Digite o seu telefone: <input type=text name=fone /><br /> Digite o sua data nasc.: <input type=text name=data /><br /> <input type=submit />
Formulários(2)
<?php
echo “Os dados que você digitou são:”; echo “<br />Nome: “.$_GET['nome']; echo “<br />Telefone: “.$_GET['fone']; echo “<br />Data: “.$_GET['data'];
echo “<br />Sua idade é: “.idade($_GET['data']).” anos”; function idade($data)
{
$idade = date('Y') – substr($data,-4); return $idade;
} ?>
Formulários(3)
text - Origina uma variável com o nome da caixa. Essa variável é uma string e contím a
informação digitada na caixa.
checkbox - Origina uma variável com o nome da checkbox. Esta variável contém valor se estiver ativa ou não contém se inativa.
radio - Origina uma variável com o nome do radio. Esta variável contém o valor do radio selecionado.
select - Origina uma variável com o nome do
select. Contém o valor do OPTION selecionado. textarea - Origina uma variável com o nome da
textarea. Contém o valor introduzido na mesma.
Conexões com banco
Estabelecer a conexão
$con = mysql_connect
(“host”,”usuario”,”senha”); Selecionar banco de dados
mysql_select_db(“banco”,$con); Enviar a consulta $q = mysql_query(“SELECT...”,$con); Receber os dados $dados = mysql_result($q,$LINHA,$COLUNA); Fechar a conexão mysql_close($con);
Conexões – exemplo3.php
<?php
$con = mysql_connect
(“localhost”,”root”,”root”) or die(“Não foi possível fazer a conexão”);
mysql_select_db(“curso”,$con) or die(“Não foi possível selecionar o banco”);
$q = mysql_query(“SELECT nome FROM pessoas”,$con);
echo mysql_result($q,0,0); mysql_close($con);
Conexões – Funções básicas
Número de linhas em uma consulta (envio de dados)
int mysql_affected_rows($q);
Número de linhas em uma consulta (recebimento de dados)
int mysql_num_rows($q);
Receber toda a linha de uma consulta array mysql_fetch_row($q);
Receber toda a linha, em matriz associativa array mysql_fetch_assoc($q);
Conexões-exemplo4.php
<?php
$con = mysql_connect(“localhost”,”root”,”root”) or die(“Não foi possível fazer a conexão”);
mysql_select_db(“curso”,$con) or die(“Não foi possível selecionar o banco”);
$q = mysql_query(“SELECT nome, empresa FROM pessoas”,$con);
$num = mysql_num_rows($q); for($i=0;$i<$num;$i++)
{
list($nome,$empresa) = mysql_fetch_row($q); echo “<br />Nome: $nome ($empresa)”;
}
mysql_close($con); ?>
Conexões-exemplo5.php
<?php
$con = mysql_connect(“localhost”,”root”,”root”); mysql_select_db(“curso”,$con);
$q = mysql_query(“SELECT codigo, nome FROM empresas”,$con);
$num = mysql_num_rows($q);
echo “<select name=empresa>”; for($i=0;$i<$num;$i++)
{
list($codigo,$nome) = mysql_fetch_row($q);
echo “<option value=$codigo>$nome</option>”; }
echo “</select>”; mysql_close($con);
Cuidados e segurança
Sempre “tratar” os dados recebidos via formulário
Ao utilizar senha, mantê-la criptografada (sha1 ou md5)
Utilizar permissões do banco de dados: nunca ter permissões “adicionais”
SQLInjection
HTTPS – Servidor Seguro – SSL Usar senha no banco de dados
Exercícios
Acrescentar no primeiro formulário um campo que recebe o salário e um campo de seleção para selecionar a empresa da pessoa
Fazer com que esse formulário insira os dados na tabela pessoas
Fazer uma tela de listagem das pessoas, exibindo o nome, empresa e idade, além de ter um link para editar e outro para apagar
Ordenar esta listagem pelo nome da pessoa Criar um filtro nesta listagem (pela empresa)
Obrigado!!!!
Nasair Júnior da Silva