Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aracaju, junho/2000
Autor:
Mauricio Vivas
mauricio@vivas.com.br
Junho de 2000
ii
iii
ndice
NDICE ......................................................................................................................... IV
NOTAS DO AUTOR ....................................................................................................... 1
01. INTRODUO ......................................................................................................... 3
iv
Objetos ............................................................................................. 30
Booleanos......................................................................................... 30
TRANSFORMAO DE TIPOS .................................................................. 30
Coeres .......................................................................................... 30
Transformao explcita de tipos .................................................... 31
Com a funo settype ....................................................................... 32
08. OPERADORES ....................................................................................................... 33
ARITMTICOS ........................................................................................ 33
DE STRINGS ........................................................................................... 33
BIT A BIT ............................................................................................... 33
DE ATRIBUIO ..................................................................................... 34
LGICOS ............................................................................................... 34
COMPARAO....................................................................................... 35
EXPRESSO CONDICIONAL .................................................................... 35
DE INCREMENTO E DECREMENTO ........................................................... 36
DE ERRO ................................................................................................ 36
ORDEM DE PRECEDNCIA ...................................................................... 37
09. ESTRUTURAS DE CONTROLE .......................................................................... 38
BLOCOS ................................................................................................ 38
COMANDOS DE SELEO ....................................................................... 38
if ....................................................................................................... 38
switch ............................................................................................... 41
COMANDOS DE REPETIO .................................................................... 42
while ................................................................................................. 42
do... while ......................................................................................... 43
for ..................................................................................................... 43
foreach ............................................................................................. 44
QUEBRA DE FLUXO................................................................................ 45
Break ................................................................................................ 45
Continue ........................................................................................... 45
v
CLASSE ................................................................................................. 60
OBJETO ................................................................................................. 60
A VARIVEL $THIS ................................................................................ 60
SUBCLASSES ......................................................................................... 61
CONSTRUTORES .................................................................................... 61
13. NOES DE SQL ................................................................................................... 63
INTRODUO ........................................................................................ 63
ESTRUTURA DAS TABELAS .................................................................... 64
COMANDO CREATE ............................................................................... 64
Comando Drop ................................................................................ 64
Comando Alter ................................................................................. 65
MANIPULANDO DADOS DAS TABELAS ................................................... 65
Comando SELECT ........................................................................... 65
Comando INSERT ............................................................................ 66
Comando UPDATE.......................................................................... 66
Comando DELETE .......................................................................... 67
14. ACESSANDO O MYSQL VIA PHP ..................................................................... 69
ESTABELECENDO CONEXES................................................................. 69
SELECIONANDO A BASE DE DADOS ........................................................ 69
REALIZANDO CONSULTAS ..................................................................... 70
vi
ESTABELECENDO CONEXES................................................................. 73
REALIZANDO CONSULTAS ..................................................................... 73
Verificando o erro na execuo de uma query ................................ 74
Apagando o resultado ...................................................................... 74
Nmero de linhas ............................................................................. 74
Utilizando os resultados .................................................................. 74
16. UTILIZANDO HEADERS ..................................................................................... 76
FUNO HEADERS_SENT .......................................................................
76
O QUE SO ............................................................................................ 77
GRAVANDO COOKIES ............................................................................ 77
LENDO COOKIES GRAVADOS ................................................................. 78
18. MANIPULANDO ARQUIVOS .............................................................................. 79
ix
Notas do autor
Este documento foi criado inicialmente como parte do projeto de
concluso de curso da Universidade Federal de Sergipe, e distribudo gratuitamente
atravs da Internet.
Depois de terminado o projeto, recebi diversas sugestes sobre contedo a
incluir, e tambm passei a dar cursos de PHP em diversas instituies de Sergipe.
Diante disso, continuei a escrever o documento, sendo algumas incluses para atender
s sugestes e outras para utilizar nos cursos.
Como poder ser observado principalmente no captulo 05, o documento
no est concludo, e nem sei se algum dia estar, tendo em vista que o uso de PHP
cresce cada vez mais, e ainda falta muito a ser dito sobre ele aqui.
Se voc tem uma pgina com tutoriais, ou gostou deste documento e quer
public-lo em seu site, fique vontade para faz-lo. S peo duas coisas:
neste documento, entrem em contato comigo por e-mail. s vezes fico meio atarefado
no trabalho, e acabo ficando sem responder alguns e-mails. Pode insistir que no h
problema . Para obter a verso original do documento, voc pode pedir por e-mail, ou
visitar o site www.vivas.com.br.
01. Introduo
Client-Side Scripts
So responsveis pelas aes executadas no browser, sem contato com o
servidor. Os exemplos mais comuns de aplicaes client-side so imagens e textos que
mudam com o passar do mouse.
Os scripts client-side so muito teis para fazer validaes de formulrios
sem utilizar processamento do servidor e sem provocar trfego na rede. Outra utilizao
comum na construo de interfaces dinmicas e leves.
Server-Side Scripts
Os scripts server-side so responsveis pela criao de pginas em tempo
real. Num mecanismo de busca, por exemplo, seria invivel manter um arquivo para
cada consulta a ser realizada. O que existe um modelo da pgina de resposta, que
mesclado com os dados no momento em que a pgina requisitada.
O cliente (navegador) no capaz de diferenciar pginas estticas de
pginas dinmicas, a no ser que o script gerador da pgina dinmica envie alguma
informao desse tipo.
O que PHP?
Basicamente, qualquer coisa que pode ser feita por algum programa CGI
pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar pginas
dinamicamente ou enviar e receber cookies.
PHP tambm tem como uma das caractersticas mais importantes o
suporte a um grande nmero de bancos de dados, como dBase, Interbase, MS-SQL
Server, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina
baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP.
Alm disso, PHP tem suporte a outros servios atravs de protocolos
como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir
sockets e interagir com outros protocolos.
Devemos notar que a requisio GET inicia com a palavra GET, inclui o
documento solicitado e encerra com a combinao dos caracteres carriage return e line
feed.
Para um melhor entendimento, voc pode fazer uma requisio GET
conectando diretamente em algum servidor WEB, conectando atravs de um programa
de telnet (geralmente o servidor http utiliza a porta 80). A resposta ser o cdigo da
pgina solicitada.
telnet www.guia-aju.com.br 80
Trying 200.241.59.16...
Connected to www.guia-aju.com.br.
Escape character is '^]'.
GET /index.php3
(... pgina solicitada ...)
Connection closed by foreign host.
Headers
A verso 1.0 do protocolo HTTP trouxe boas inovaes ao mesmo. Uma
delas foi a criao de headers nas mensagens de requisio e de resposta. Os headers so
informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio,
e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a
requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras
informaes.
Assim foi possvel definir um outro mtodo de requisio de arquivos,
que resolveu os principais problemas do mtodo GET.
O mtodo POST
Atravs da utilizao de headers possvel enviar os parmetros da URL
solicitada sem expor esses dados ao usurio, e tambm sem haver um limite de
tamanho.
Uma conexo ao servidor HTTP utilizando o mtodo POST seria algo
semelhante ao que segue:
telnet www.guia-aju.com.br 80
Trying 200.241.59.16...
Connected to www.guia-aju.com.br.
Escape character is '^]'.
POST /index.php3
Accept */*
Content-type: application/x-www-form-urlencoded
Content-length:22
id=0024horas&tipo=Taxi
(... pgina solicitada ...)
Connection closed by foreign host.
10
Definindo um formulrio
Por ser uma linguagem de marcao, a sintaxe do HTML na maioria dos
casos exige uma tag de incio e uma de final daquele bloco. Exatamente isso que
ocorre com a definio de um formulrio: uma tag no incio e outra no final, sendo que
todos os elementos do formulrio devem estar entre as duas tags. Isto torna possvel a
incluso de mais de um formulrio num mesmo html. As tags citadas so:
<form name= action= method= enctype=>
Onde temos:
name: o identificador do formulrio. Utilizado principalmente em Scripts
client-side (JavaScript);
action: nome do script que receber os dados do formulrio ao ser
submetido. Mais frente esto abordadas as maneiras de tratar esses dados recebidos;
method: mtodo de envio dos dados: get ou post;
enctype: formato em que os dados sero enviados. O default
A tag <input>
Muitos elementos de um formulrio html so definidos pela tag <input>.
Cada tipo de elemento possui parmetros prprios, mas todos possuem pelo menos dois
11
parmetros em comum: type, que define o tipo de elemento, e name, que como j foi
dito define o nome daquele elemento.
Campo de Texto
12
Checkbox
<input type="checkbox" name="" value="" checked>
Radio Button
<input type="radio" name="" value="" checked>
Submit Button
<input type="submit" name="" value="">
13
Parmetros:
Value o texto que aparecer no corpo do boto.
Reset Button
<input type="reset" name="" value="">
Button
<input type="button" name="" value="">
TextArea
<textarea cols="" rows="" name="" wrap="">texto</textarea>
Select
<select name="" size="" multiple>
<option value="">texto</option>
</select>
Upload de arquivos
<input type="file" name="" size="">
15
16
como no exemplo:
DocumentRoot "C:\vivas\"
Feito isso, crie um arquivo com um dos nomes definidos como ndice e
coloque no diretrio definido como root. Execute o servidor Apache e tente acessar o
endereo http://localhost pelo browser. Se a pgina for exibida, porque o servidor
foi instalado corretamente.
17
PHP
O PHP pode ser conseguido em www.php.net, e sua instalao tambm
simples. Atualmente existem duas opes de download: a primeira no formato
padro de instaladores do Windows, e neste caso no necessrio explicar, j que o
padro citado bastante simples. Para quem gosta de sujar as mos, existe a opo
de download dos arquivos em formato zip, que necessitam de configurao manual.
Veremos a seguir os passos necessrios para isso:
Descompactar os arquivos para algum diretrio (no nosso exemplo,
c:\php)
Renomear o arquivo de configurao. O arquivo php.ini-dist deve
ser renomeado (ou copiado) para php.ini. Depois disso, o arquivo pode ser editado,
bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os
mdulos (c:\php). Veja o exemplo:
extension_dir
c:\php
18
Acessando
pgina
atravs
do
servidor
mySQL
O
banco
de
dados
mySQL
pode
ser
conseguido
em
INDEX
SELECT
CREATE
INSERT
SHUTDOWN
DELETE
PROCESS
UPDATE
DROP
REFERENCES
USAGE
19
20
21
Separador de instrues
22
Nomes de variveis
Toda varivel em PHP tem seu nome composto pelo caracter $ e uma
string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja,
as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito cuidado ao
definir os nomes das variveis. bom evitar os nomes em maisculas, pois como
veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so
formados por letras maisculas.
Comentrios
23
Exemplos:
<?
echo teste; /* Isto um comentrio com mais
de uma linha, mas no funciona corretamente ?>
*/
<?
echo teste; /* Isto um comentrio com mais
de uma linha que funciona corretamente
*/
?>
24
Ao
acessar
arquivo
atravs
do
servidor
Apache
25
07. Tipos
Tipos Suportados
26
Strings
Exemplo:
<?
$teste = "Mauricio";
$vivas = '---$teste--\n';
echo "$vivas";
?>
27
Sintaxe
Significado
\n
Nova linha
\r
\t
Tabulao horizontal
\\
A prpria barra ( \ )
\$
O smbolo $
Aspa simples
Aspa dupla
Arrays
28
Listas
As listas so utilizadas em PHP para realizar atribuies mltiplas.
Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos
o exemplo:
Exemplo:
list($a, $b, $c) = array(a, b, c);
==
==
==
==
null
um
dois
tres
29
No apndice 02 est disponvel uma lista das funes mais comuns para o
tratamento de arrays.
Objetos
Um objeto pode ser inicializado utilizando o comando new para instanciar
uma classe para uma varivel.
Exemplo:
class teste {
function nada() {
echo nada;
}
}
$vivas = new teste;
$vivas -> nada();
Booleanos
Transformao de tipos
Exemplo:
$vivas =
$vivas =
$vivas =
$vivas =
1;
// $vivas a string 1
$vivas + 1; // $vivas o integer 2
$vivas + 3.7;// $vivas o double 5.7
1 + 1.5
// $vivas o double 2.5
nmeros o seguinte:
-
Exemplos:
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
+
+
+
+
+
+
10.5;
//
-1.3e3;
//
teste10.5; //
10testes; //
" 10testes";
"+ 10testes";
$vivas == 11.5
$vivas == -1299
$vivas == 1
$vivas == 11
// $vivas == 11
// $vivas == 1
31
Exemplo:
$vivas =
$vivas =
$vivas =
$vivas =
15;
(double) $vivas
3.9
(int) $vivas
//
//
//
//
//
(array)
(object)
// $vivas integer
// $vivas double
32
08. Operadores
Aritmticos
adio
subtrao
multiplicao
diviso
mdulo
de strings
concatenao
bit a bit
&
e lgico
ou lgico
ou exclusivo
no (inverso)
<<
shift left
>>
shift right
33
de atribuio
atribuio simples
+=
-=
*=
/=
%=
.=
&=
|=
^=
<<=
>>=
Exemplo:
$a = 7;
$a += 2; // $a passa a conter o valor 9
Lgicos
Utilizados para inteiros representando valores booleanos
and
e lgico
or
ou lgico
xor
ou exclusivo
no (inverso)
34
&&
e lgico
||
ou lgico
Comparao
==
igual a
===
exatamente igual a
!=
diferente de
<
menor que
>
maior que
<=
menor ou igual a
>=
maior ou igual a
Expresso condicional
35
de incremento e decremento
++
incremento
--
decremento
de erro
PHP suporta um operador para controlar erros:
@
36
ordem de precedncia
02
Or
03
Xor
04
And
05
06
07
?:
08
||
09
&&
10
11
12
&
13
== != === !==
14
15
<< >>
16
+-.
17
*/%
18
19
20
new
37
Blocos
Um bloco consiste de vrios comandos agrupados com o objetivo de
relacion-los com determinado comando ou funo. Em comandos como if, for,
while, switch e em declaraes de funes blocos podem ser utilizados para permitir
que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos
caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do
cdigo no relacionada com os comandos citados ou funes no produzir efeito
algum, e ser tratada normalmente pelo interpretador.
Exemplo:
if ($x == $y)
comando1;
comando2;
Comandos de seleo
Tambm chamados de condicionais, os comandos de seleo permitem
executar comandos ou blocos de comandos com base em testes feitos durante a
execuo.
if
O mais trivial dos comandos condicionais o if. Ele testa a condio e
executa o comando indicado se o resultado for true (valor diferente de zero). Ele
possui duas sintaxes:
38
if (expresso)
comando;
if (expresso):
comando;
. . .
comando;
endif;
if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
O comando elseif tambm pode ser utilizado com dois tipos de sintaxe.
Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:
if (expressao1)
comando;
[ elseif (expressao2)
comando; ]
[ else
comando; ]
if (expressao1) :
comando;
. . .
comando;
[ elseif (expressao2)
comando;
. . .
comando; ]
[ else
comando;
. . .
comando; ]
endif;
40
switch
if ($i == 0)
print i
elseif ($i ==
print i
elseif ($i ==
print i
igual a zero;
1)
igual a um;
2)
igual a dois;
switch ($i) {
case 0:
print i igual a zero;
break;
case 1:
print i igual a um;
break;
case 2:
print i igual a dois;
break;
}
41
case 2:
print i igual a dois;
switch ($s) {
case casa:
print A casa amarela;
case arvore:
print a rvore bonita;
case lampada:
print joao apagou a lampada;
comandos de repetio
while
O while o comando de repetio (lao) mais simples. Ele testa uma
condio e executa um comando, ou um bloco de comandos, at que a condio testada
seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:
while (<expressao>)
<comando>;
while (<expressao>):
<comando>;
. . .
<comando>;
endwhile;
42
do... while
$i = 0;
do {
print ++$i;
} while ($i < 10);
for
43
for (<inicializacao>;<condicao>;<incremento>)
<comando>;
for (<inicializacao>;<condicao>;<incremento>) :
<comando>;
. . .
<comando>;
endfor;
foreach
Na verso 4 do PHP foi includo mais um comando de repetio, utilizado
para percorrer os elementos de um array. Sua sintaxe :
foreach(array as $valor) expressao
foreach(array as $chave => $valor) expressao
44
Quebra de fluxo
Break
O comando break pode ser utilizado em laos de do, for e while,
alm do uso j visto no comando switch. Ao encontrar um break dentro de um
desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo
normalmente o fluxo do script.
while ($x > 0) {
...
if ($x == 20) {
echo erro! x = 20;
break;
...
}
No trecho de cdigo acima, o lao while tem uma condio para seu
trmino normal ($x <= 0), mas foi utilizado o break para o caso de um trmino no
previsto no incio do lao. Assim o interpretador seguir para o comando seguinte ao
lao.
Continue
45
46
10. Funes
Definindo funes
Valor de retorno
47
Argumentos
/*
Aqui
as
duas
variveis
tero
seus
49
Contexto
O contexto o conjunto de variveis e seus respectivos valores num
determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do
bloco que contm a implementao da mesma criado um novo contexto, contendo as
variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro
daquele bloco sero eliminadas ao trmino da execuo da funo.
Escopo
O escopo de uma varivel em PHP define a poro do programa onde ela
pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global.
Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel
de escopo global no pode ser utilizada no interior de uma funo sem que haja uma
declarao.
Exemplo:
$vivas = Testando;
function Teste() {
echo $vivas;
}
Teste();
50
Exemplo:
$vivas = Testando;
function Teste() {
global $vivas;
echo $vivas;
}
Teste();
Funes variveis
PHP suporta o conceito de funes variveis. Isso significa que se uma
varivel tiver parnteses ao final, a funo cujo nome for o valor da varivel ser
executada, se existir. Vejamos o exemplo:
function soma($a, $b) {
return $a + $b;
}
function multiplica($a, $b) {
return $a * $b;
}
function dobro($a) {
return 2 * $a;
}
$func = 'soma';
echo $func(4,5) . "<br>\n";
$func = 'multiplica';
echo $func(4,5) . "<br>\n";
$func = 'dobro';
echo $func(4) . "<br>\n";
51
52
Uma varivel esttica visvel num escopo local, mas ela inicializada
apenas uma vez e seu valor no perdido quando a execuo do script deixa esse
escopo. Veja o seguinte exemplo:
function Teste() {
$a = 0;
echo $a;
$a++;
}
Exemplo:
function Teste() {
echo "$a";
static $a = 0;
$a++;
}
Variveis Variveis
Para interagir com a navegao feita pelo usurio, necessrio que o PHP
possa enviar e receber informaes para o software de navegao. A maneira de enviar
informaes, como j foi visto anteriormente, geralmente atravs de um comando de
impresso, como o echo. Para receber informaes vindas do navegador atravs de um
link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por
exemplo: se seu script php est localizado em http://localhost/teste.php3 e
voc o chama com a url http://localhost/teste.php3?vivas=teste,
automaticamente o PHP criar uma varivel com o nome $vivas contendo a string
54
URLencode
O PHP possui duas funes para tratar com texto em urlencode. Seguem
suas sintaxes:
string urlencode(string texto);
string urldecode(string texto);
Utilizando arrays
Cada elemento de um formulrio HTML submetido a um script PHP cria
no ambiente do mesmo uma varivel cujo nome o mesmo nome do elemento. Por
exemplo: um campo definido como:
<input type=text name=endereco>
ao ser submetido a um script PHP far com que seja criada uma varivel
com o nome $endereco. Isto acontece de forma semelhante para cookies, como
veremos mais adiante.
55
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
name="teste[]"
name="teste[]"
name="teste[]"
name="teste[]"
name="teste[]"
value="valor1">opcao1
value="valor2">opcao2
value="valor3">opcao3
value="valor4">opcao4
value="valor5">opcao5
Variveis de ambiente
56
A palavra mixed indica que a varivel var pode ser de diversos tipos.
A funo gettype pode retornar as seguintes strings: integer,
double, string, array, object e unknown type.
So as funes is_int,
is_integer,
is_real,
is_long,
varivel, ser criada uma nova varivel de mesmo nome e de contedo vazio, a no ser
que a chamada seja pela funo isset. Se a operao for bem sucedida, retorna true.
Existem dois tipos de teste que podem ser feitos para verificar se uma
varivel est setada: com a funo isset e com a funo empty.
A funo isset
E retorna true se a varivel estiver setada (ainda que com uma string
vazia ou o valor zero), e false em caso contrrio.
A funo empty
58
Definindo constantes
59
Classe
Uma classe um conjunto de variveis e funes relacionadas a essas
variveis. Uma vantagem da utilizao de programao orientada a objetos poder
usufruir do recurso de encapsulamento de informao. Com o encapsulamento o usurio
de uma classe no precisa saber como ela implementada, bastando para a utilizao
conhecer a interface, ou seja, as funes disponveis. Uma classe um tipo, e portanto
no pode ser atribuda a uma varivel. Para definir uma classe, deve-se utilizar a
seguinte sintaxe:
class Nome_da_classe {
var $variavel1;
var $variavel2;
function funcao1 ($parametro) {
/* === corpo da funo === */
}
}
Objeto
Como foi dito anteriormente, classes so tipos, e no podem ser atribudas
a variveis. Variveis do tipo de uma classe so chamadas de objetos, e devem ser
criadas utilizando o operador new, seguindo o exemplo abaixo:
$variavel = new $nome_da_classe;
Para
utilizar
as
A varivel $this
Na definio de uma classe, pode-se utilizar a varivel $this, que o
prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma funo
desse objeto na definio da classe utiliza a varivel $this, essa varivel significa o
objeto que estamos utilizando.
60
$minhaconta->credito(50);
$minhaconta->saldo(); // retorna 50
SubClasses
Uma classe pode ser uma extenso de outra. Isso significa que ela herdar
todas as variveis e funes da outra classe, e ainda ter as que forem adicionadas pelo
programador. Em PHP no permitido utilizar herana mltipla, ou seja, uma classe
pode ser extenso de apenas uma outra.Para criar uma classe extendida, ou derivada de
outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo
seguinte:
class novaconta extends conta {
var $num;
function numero() {
return $this->num;
}
}
class conta {
var $saldo;
function conta () {
$this.saldo = 0;
}
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
62
de Banco de Dados
Relacional.
SQL apresenta uma srie de comandos que permitem a definio dos
dados, chamada de DDL (Data Definition Language), composta entre outros pelos
comandos Create, que destinado a criao do Banco de Dados, das Tabelas que o
compe, alm das relaes existentes entre as tabelas. Como exemplo de comandos da
classe DDL temos os comandos Create, Alter e Drop.
Os comandos da srie DML (Data Manipulation Language), destinados a
consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais
tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os
comandos Select, Insert, Update e Delete.
Uma subclasse de comandos DML, a DCL (Data Control Language),
dispe de comandos de controle como Grant e Revoke.
A Linguagem SQL tem como grandes virtudes sua capacidade de
gerenciar ndices, sem a necessidade de controle individualizado de ndice corrente,
algo muito comum nas linguagens de manipulao de dados do tipo registro a registro.
Outra caracterstica muito importante disponvel em SQL sua capacidade de
construo de vises, que so formas de visualizarmos os dados na forma de listagens
independente das tabelas e organizao lgica dos dados.
Outra caracterstica interessante na linguagem SQL a capacidade que
dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de
iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so
responsveis por estas facilidades.
63
Comando Create
Este comando permite a criao de tabelas no banco de dados ou mesmo a
criao do banco.
Sintaxe:
CREATE DATABASE < nome_db >;
onde:
nome_db - indica o nome do Banco de Dados a ser criado.
Sintaxe:
CREATE TABLE < nome_tabela > (
nome_atributo1 < tipo > [ NOT NULL ],
nome_atributo2 < tipo > [ NOT NULL ],
......
nome_atributoN < tipo > [ NOT NULL ]
) ;
onde:
nome_table - indica o nome da tabela a ser criada.
nome_atributo - indica o nome do campo a ser criado na tabela.
tipo - indica a definio do tipo de atributo ( integer(n), char(n), ... ).
Comando Drop
Este comando elimina a definio da tabela, seus dados e referncias.
Sintaxe:
DROP TABLE
64
Comando Alter
Este comando permite inserir/eliminar atributos nas tabelas j existentes.
Comando:
ALTER TABLE < nome_tabela >
nome_atributo1 < tipo >
nome_atributoN < tipo >
) ;
ADD / DROP (
[ NOT NULL ],
[ NOT NULL ]
onde:
DISTINCT : Para eliminar linhas duplicadas na sada.
Expressao: Define os dados que queremos na sada, normalmente uma ou
mais colunas de uma tabela da lista FROM.
AS nom-atributo : um alias para o nome da coluna, exemplo:
FROM : lista das tabelas na entrada
WHERE : critrios da seleo
ORDER BY : Critrio de ordenao das tabelas de sada. ASC ordem
ascendente, DESC ordem descendente
Exemplo:
SELECT cidade, estado from brasil where populacao > 100000;
65
Comando INSERT
Adiciona um ou vrios registros a uma tabela. Isto referido como
consulta anexao.
Sintaxe bsica
INSERT INTO destino [(campo1[, campo2[, ...]])]
VALUES (valor1[, valor2[, ...])
Comando UPDATE
Cria uma consulta atualizao que altera os valores dos campos em uma
tabela especificada com base em critrios especficos.
Sintaxe:
UPDATE tabela
SET campo1 = valornovo, ...
WHERE critrio;
Onde:
Tabela - O nome da tabela cujos os dados voc quer modificar.
Valornovo - Uma expresso que determina o valor a ser inserido em um
campo especfico nos registros atualizados.
critrio - Uma expresso que determina quais registros devem ser
atualizados. S os registros que satisfazem a expresso so atualizados.
66
Comando DELETE
Remove registros de uma ou mais tabelas listadas na clusula FROM que
satisfaz a clusula WHERE.
Sintaxe
DELETE [tabela.*]
FROM tabela
WHERE critrio
onde:
tabela.* - O nome opcional da tabela da qual os registros so excludos.
tabela - O nome da tabela da qual os registros so excludos.
critrio - Uma expresso que determina qual registro deve ser excludo.
67
68
69
Realizando consultas
Para executar consultas SQL no mySQL, utiliza-se o comando
mysql_query, que tem a seguinte assinatura:
Nmero de linhas
int mysql_num_rows(int result);
70
Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT.
As mais comuns sero vistas a seguir:
int mysql_result(int result, int linha, mixed [campo] );
correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser
utilizado no comando mysql_result.
Este comando deve ser utilizado apenas para resultados pequenos.
Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:
array mysql_fetch_array(int result);
71
alterar a posio indicada por esse ponteiro deve ser utilizada a funo
mysql_data_seek, sendo que o nmero da primeira linha de um resultado zero.
72
IMPORTANTE:
comando
pg_close
no
encerra
conexes
tty=tty
Realizando consultas
Para executar consultas SQL no Postgres, utiliza-se o comando pg_exec,
que tem a seguinte assinatura:
int pg_exec(int conexao, string query );
qual a base de dados selecionada, basta utilizar a funo string pg_dbname, que tem a
seguinte assinatura:
string pg_dbname(int conexo);
Apagando o resultado
int pg_freeresult(int result);
Nmero de linhas
int pg_numrows(int result);
Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT.
As mais comuns sero vistas a seguir:
74
correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser
utilizado no comando pg_result.
Este comando deve ser utilizado apenas para resultados pequenos.
Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:
array pg_fetch_array(int result, int linha);
75
Para obter uma lista completa dos headers HTTP, visite o seguinte
endereo:
http://www.w3.org/Protocols/rfc2068/rfc2068
funo headers_sent
boolean headers_sent (void);
76
Gravando cookies
Para gravar cookies no cliente, deve ser utilizada a funo setcookie, que
possui a seguinte assinatura:
int setcookie(string nome, string valor, int exp, string path,
string dominio, int secure);
onde:
nome: nome do cookie;
valor: valor armazenado no cookie;
exp: data de expirao do cookie (opcional), no formato Unix. Se no for
definida, o cookie ser de sesso;
path: path do script que gravou o cookie;
dominio: domnio responsvel pelo cookie;
77
secure: se tiver valor 1, indica que o cookie s pode ser transmitido por
uma conexo segura (https).
Observaes:
Um cookie no pode ser recuperado na mesma pgina que o gravou, a
menos que esta seja recarregada pelo browser.
Mltiplas chamadas funo setcookie sero executadas em ordem
inversa;
Cookies s podem ser gravados antes do envio de qualquer informao
para o cliente. Portanto todas as chamadas funo setcookie devem ser feitas antes
do envio de qualquer header ou texto.
pgina
anterior
pelo
$HTTP_COOKIE_VARS[teste]
ou pela varivel
$teste
78
A funo filesize pode ser bastante til na criao de um script que liste o
contedo de um diretrio, mas tambm utilizada em casos como a funo fread, que
ser vista mais adiante.
int filesize(string arquivo);
79
Limpando o cache
Para ler ou escrever num arquivo preciso antes de qualquer coisa abrilo. Para isso deve ser utilizada a funo fopen, como visto a seguir:
int fopen(string arquivo, string modo, int [use_include_path]);
r
r+
80
w+
a+
81
Lendo de um arquivo
string fread(int fp, int tamanho);
Escrevendo em um arquivo
int fwrite(int fp, string conteudo, int [tamanho]);
Exemplo
<?
$arquivo = teste.gif; /* este nome deve ser alterado para o
nome do arquivo a ser utilizado */
$id = fopen($arquivo, r); /* abre o arquivo para leitura */
$conteudo = fread($id,filesize($arquivo)); /* le o conteudo do
arquivo e grava na variavel $conteudo */
fclose($id); /* fecha o arquivo */
header(Content-type: image/gif); /* esta linha envia um header
ao browser informando que o tipo de arquivo que est sendo
enviado uma imagem no formato gif */
echo $conteudo; /* esta ltima linha envia ao browser o contedo
do arquivo */
?>
nome teste:
83
<?
$id = fopen($teste, r); /* abre o arquivo para leitura */
$teste_conteudo = fread($id,filesize($teste)); /* le o conteudo
do arquivo e grava na variavel $conteudo */
fclose($id); /* fecha o arquivo */
?>
84
onde:
to string contendo o e-mail do destinatrio;
subject assunto da mensagem;
message o corpo da mensagem.
headers outras informaes de cabealho, como por exemplo from,
reply-to, bcc, etc.
Para facilitar a compreenso dos scripts, os argumentos (como geralmente
so strings grandes) devem ser atribudos a variveis antes da chamada da funo mail.
85
Class_exists e function_exists
bool class_exists (string nome);
int function_exists (string nome);
Date
string date (string formato [, int timestamp]);
Esta funo serve para formatar uma data. O segundo argumento deve
estar no formato timestamp, que representa o nmero de segundos desde 01/01/1970. A
string formato dever conter caracteres que sero substitudos por partes da data
formatada. Alguns dos caracteres que podem ser usados so:
a
d
h
H
i
L
m
s
t
w
Y
y
z
"am" ou "pm"
dia do ms, sempre com 2 dgitos: "01" a "31"
hora, formato de 12 horas "01" a "12"
hora, formato de 24 horas "00" a "23"
minutos, sempre com 2 dgitos: "00" a "59"
boolean indicando se o ano bissexto: "0" ou "1"
ms, sempre com 2 dgitos: "01" a "12"
segundos, sempre com 2 dgitos: "00" a "59"
nmero de dias do ms: "28" a "31"
dia da semana: "0" (Domingo) a "6" (Sbado)
ano com 4 dgitos: "1999"
ano com 2 dgitos: "99"
dia do ano: "0" a "365"
Exemplo:
echo date(d/m/Y H:i:s); // imprime 01/01/2001 13:15
86
number_format
string
number_format(float
numero,
ponto_decimal, string pomto_mil);
int
decimais,
string
set_time_limit
void set_time_limit (int seconds)
87
88
htmlentities
string htmlentities(string str);
para 'º'
para 'ª'
para 'á'
para ç'
nl2br
string nl2br(string str);
89
get_meta_tags
array get_meta_tags(string arquivo);
strip_tags
string strip_tags(string str);
urlencode
string urlencode(string str);
urldecode
string urldecode(string str);
Implode e join
string implode(string separador, array partes);
string join(string separador, array partes);
split
array split(string padrao, string str, int [limite]);
91
explode
array explode(string padrao, string str);
str1,
string
str2,
double
strcasecmp
int strcasecmp(string str1, string str2);
strcmp
int strcasecmp(string str1, string str2);
92
strstr
string strstr(string str1, string str2);
string strchr(string str1, string str2);
stristr
string strstr(string str1, string str2);
strpos
int strpos(string str1, string str2, int [offset] );
strrpos
int strrpos(string haystack, char needle);
93
chop
string chop(string str);
\n
\n
); // retorna
Teste
ltrim
string ltrim(string str);
Teste
\n
\n ); // retorna Teste
\n
\n
trim
string trim(string str);
\n
\n ); // retorna Teste
strrev
string strrev(string str);
94
strtolower
string strtolower(string str);
strtoupper
string strtoupper(string str);
ucfirst
string ucfirst(string str);
ucwords
string ucwords(string str);
95
str_replace
string
str_replace(string
str1,
string
str2,
string
str3);
Funes diversas
chr
string chr(int ascii);
ord
int ord(string string);
echo
echo(string arg1, string [argn]... );
print
print(string arg);
Funes Genricas
Array
array array(...);
array("um",
range
array range(int minimo, int maximo);
97
shuffle
void shuffle(array &arr);
sizeof
int sizeof(array arr);
Funes de navegao
Toda varivel do tipo array possui um ponteiro interno indicando o
prximo elemento a ser acessado no caso de no ser especificado um ndice. As funes
seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array
para verificar seu contedo (chaves e elementos).
reset
mixed reset(array arr);
next
mixed next(array arr);
prev
mixed prev(array arr);
pos
mixed pos(array arr);
key
mixed key(array arr);
99
Funes de ordenao
So funes que servem para arrumar os elementos de um array de acordo
com determinados critrios. Estes critrios so: manuteno ou no da associao entre
ndices e elementos; ordenao por elementos ou por ndices; funo de comparao
entre dois elementos.
sort
void sort(array &arr);
rsort
void rsort(array &arr);
100
asort
void asort(array &arr);
arsort
void arsort(array &arr);
ksort
void ksort(array &arr);
usort
void usort(array &arr, function compara);
Esta uma funo que utiliza outra funo como parmetro. Ordena os
elementos de um array sem manter os relacionamentos com os ndices, e utiliza para
efeito de comparao uma funo definida pelo usurio, que deve comparar dois
elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido
pelo usurio.
uasort
void uasort(array &arr, function compara);
101
uksort
void uksort(array &arr, function compara);
102