O documento descreve como funciona a ligação entre um servidor MySQL e um servidor web através do PHP para aceder e manipular dados numa base de dados. Explica o modelo cliente-servidor entre o browser e o servidor web, como o PHP processa pedidos que envolvem SQL e se liga ao MySQL, e dá exemplos de funções PHP como mysql_connect() e mysql_query() para estabelecer esta comunicação.
2. O MySQL
Modelo cliente-servidor da solução usbwebserver
O browser cliente pede o ficheiro index.php ao servidor com
endereço IP 127.0.0.1
hp No servidor, o serviço Apache está à escuta no porto 80.
x.p
e
ind .0.1) Quando recebe um pedido vai procurar o ficheiro ao directório
de .0 definido (root no caso do usbwebserver, ou htdocs noutros)
ttp 127
h r p L) http://127.0.0.1/index.php
ido rvido sta ph
d e po dex. HTM
pe (s s
re a in igo O Apache observa o código recebido. Se tiver tags <? ?>
d
gin có envia-o ao interpretador PHP para ele o processar (caso o
( pá s c/
a
ap
en ficheiro não contenha qualquer tag de php, devolve de
imediato o ficheiro ao cliente tal como está guardado)
O interpretador recebe o código PHP e processa-o. Se o
código tiver pedidos de ligação a um servidor de Base de
127.0.0.1
SQL
html dados (local ou remoto) - MySQL neste caso - ele próprio
resposta
estabelece ligação com o mesmo, envia-lhe uma query de
interpretador
SQL e recebe a resposta
código <? php ?>
Depois de processado todo o código php, o interpretador
Pasta root devolve ao Apache o resultado da sua tarefa (aqui já só lhe
do Apache devolve código HTML, resultado do seu trabalho)
(htdocs)
index.php O Apache recebe o código HTML do interpretador e envia-o
... 127.0.0.1 para o browser do cliente
Uma vez que os browsers entendem código HTML, recebem-
no e constroem a página com o resultado final pedido.
3. O MySQL
Ligação ao servidor através do PHP | código SQL
SET NAMES latin1; INSERT INTO `CDs` VALUES
SET FOREIGN_KEY_CHECKS = 0; ('1','Bloodshot','10','5','3','Popular','Rock','2009-04-06 11:42:29'),
('2','The Most Favorite Opera Duets','10','5','3','Classical','Opera','2009-04-06
DROP TABLE IF EXISTS `CDs`; 11:42:29'),
('3','New Orleans Jazz','17','4','1','Popular','Jazz','2009-04-06 11:42:29'),
CREATE TABLE `CDs` ( ('4','Music for Ballet Class','9','4','2','Classical','Dance','2009-04-06 11:42:29'),
`idCd` smallint(6) NOT NULL auto_increment, ('5','Music for Solo Violin','24','2','5','Classical','General','2009-04-06 11:42:29'),
`nomeCd` varchar(50) NOT NULL, ('6','Cie li di Toscana','16','6','8','Classical','Vocal','2009-04-06 11:42:29'),
`emStock` smallint(5) unsigned NOT NULL, ('7','Mississippi Blues','2','25','6','Popular','Blues','2009-04-06 11:42:29'),
`emEncomenda` smallint(5) unsigned NOT NULL, ('8','Pure','32','3','10','Popular','Jazz','2009-04-06 11:42:29'),
`emReserva` smallint(5) unsigned NOT NULL, ('9','Mud on the Tires','12','15','13','Popular','Country','2009-04-06 11:42:29'),
`Genero` enum('Classical','Popular') NOT NULL, ('10','The Essence','5','20','10','Popular','New Age','2009-04-06 11:42:29'),
`Categoria` varchar(20) NOT NULL, ('11','Embrace','24','11','14','Popular','New Age','2009-04-06 11:42:29'),
`RowUpdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update ('12','The Magic of Satie','42','17','17','Classical','General','2009-04-06
CURRENT_TIMESTAMP, 11:42:29'),
PRIMARY KEY (`idCd`,`emEncomenda`) ('13','Swan Lake','25','44','28','Classical','Dance','2009-04-06 11:42:29'),
) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=latin1; ('14','25 Classical Favorites','32','15','12','Classical','General','2009-04-06
11:42:29'),
('15','La Boheme','20','10','5','Classical','Opera','2009-04-06 11:42:29'),
('16','Bach Cantatas','23','12','8','Classical','General','2009-04-06 11:42:29'),
('17','Golden Road','23','10','17','Popular','Country','2009-04-06 11:42:29'),
('18','Live in Paris','18','20','10','Popular','Jazz','2009-04-06 11:42:29'),
('19','Richland Woman Blues','22','5','7','Popular','Blues','2009-04-06 11:42:29'),
('20','Morimur (after J. S. Bach)','28','17','16','Classical','General','2009-04-06
11:42:29'),
('21','The Best of Italian Opera','10','35','12','Classical','Opera','2009-04-06
11:42:29'),
('22','Runaway Soul','15','30','14','Popular','Blues','2009-04-06 11:42:29'),
('23','Stages','42','0','8','Popular','Blues','2009-04-06 11:42:29'),
('24','Bach: Six Unaccompanied Cello
Suites','16','8','8','Classical','General','2009-04-06 11:42:29');
4. O MySQL
Ligação ao servidor através do PHP | as funções
• mysql_connect ( endereço do servidor, utilizador, password ) -> Estabelece ligação
com servidor de base de dados
• mysql_select_db ( nome da base de dados, variável de ligação ) -> Abre base de dados
• mysql_query ( query de sql ) -> Envia uma query à base de dados (INSERT, UPDATE,
DELETE OU SELECT).
• mysql_fetch_array ( variável de resultado da query ) -> Devolve array com campos de
uma linha e avança ponteiro para linha (registo) seguinte.
• mysql_num_rows ( variável de resultado da query ) -> Devolve o número de registos da
consulta (query)
• mysql_close ( variável de ligação ) -> Encerra a ligação com o servidor.
5. O MySQL
Ligação ao servidor através do PHP | exemplo funcional
/////////////////////////////// configuração de acesso ao servidor de base de dados /////////////////////////////////////////
$servidor="localhost"; $utilizador="root"; $passwd="esap"; $baseDados = "Aula1";
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$ligacao = mysql_connect ( $servidor, $utilizador, $passwd ) or die ( 'Erro ao ligar ao servidor... ' . mysql_error() );
mysql_select_db ( $baseDados, $ligacao ) or die ( 'Erro ao executar mysql_select_db: ' . mysql_error () );
$query_sql = " SELECT * FROM CDs WHERE Categoria='Blues' ";
$resultado = mysql_query ( $query_sql ) or die ( 'Erro ao executar mysql_query: ' . mysql_error () );
echo ("<h1> Primeira ligação à BD {$baseDados} </h1>");
echo ("<h3> Vou fazer a seguinte query: {$query_sql} </h3>");
$contador = 1;
while ( $linhaTabela = mysql_fetch_array ( $resultado ) )
{
echo ("{ $contador } > {$linhaTabela ['nomeCd']} - {$linhaTabela ['Categoria']} <br />");
$contador++;
}
echo ("<h4> Número de registos encontrados na tabela: " . mysql_num_rows ( $resultado ) . "</h4>");
mysql_close ( $ligacao );
6. O MySQL
Ligação ao servidor através do PHP | exemplo prático
http://aulasftp.netai.net/mysql/act1/