Enrera
Mòdul 4

Creació i gestió d'entorns web dinàmics (PHP)

  Pràctica
1
2
3
4
5
   
Exercicis
Exercicis
 
 

 Connectar el PHP amb el MySQL

   
 

Estem arribant al final d'aquest capítol de treball amb les bases de dades, i seria bo per començar a fer boca aconseguir una connexió senzilla amb les vostres dades des del PHP. Es pretén introduir les funcions PHP natives per accedir a bases de dades d'un nivell molt elemental.

   
 
Desenvolupament de la pràctica
   
 

L'estructura per accedir a una base de dades és molt semblant al protocol per accedir a un fitxer:

 
  • Obrir la base de dades.
  • Trametre la comanda SQL a la base de dades.
  • Retornar el resultat de la consulta.
  • Tancar la connexió de la base de dades.
   
  Presentarem ara algunes de les seqüències utilitzades per atacar una base de dades MySQL. Podeu observar que a la columna dreta hi ha la correspondència per connectar-se a la base de dades mitjançant ODBC.
   
   
 
PHP vs MySQL PHP vs ODBC
   
mysql_affect_rows ($conex)  
Retorna la quantitat de registres afectats per l'última sentència SQL d'actualització o eliminació.
   
mysql_close ($conex) odbc_close(...)
Tanca la connexió amb el servidor de BD.
   
mysql_connect ( $host, $usuari, $contrasenya) odbc_connect(...)
Fa una connexió amb el servidor del MySQL.
   
mysql_query ($db, $sql, $conex) odbc_do($conex, $sql)
odbc_exec($conex, $sql)
Envia una sentència SQL a la base de dades.
   
mysql_error ($conex)  
Retorna un missatge de text amb l'error produït a $errmsg.
   
mysql_fetch_array ($ resul, $tipus)  
Retorna el resultat de la consulta realitzada dins un array. En $tipus es poden definir tres constants: MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH.
   
mysql_fecth_row ( $resul, $num_fila) odb_fecth_row (...)
S'accedeix a la següent fila activa del resultat de la seqüència SQL generada. El paràmetre $num_fila és opcional, i si es passa, s'accedeix a la fila corresponent a aquest valor.
   
mysql_field_name ($resul, $index) odbc_fiel_name(...)
Retorna el nom del camp que s'apunta amb la variable index.
   
mysql_num_fields ($resul) odbc_num_fields(...)
Informa de la quantitat de camps que s'han retornat en el resultat d'una consulta.
   
mysql_num_rows ($resul) odbc_num_rows(...)
Retorna la quantitat de files o seqüències que ha retornat la instrucció SQL.
   
mysql_pconnect ($host, $usuari, $contrasenya) odbc_pconnect($dsn,$usuari,$con)
Fa una connexió persistent contra el servidor MySQL.
   
mysql_query ($sql, $connex)  
Envia una instrucció SQL contra la connexió que s'ha obert prèviament.
   
mysql_select_db ($base_dades, $connex)  
Selecciona una de les bases de dades, per establir posteriorment la connexió.
   
mysql_result ($resultat,$fila,$columna) odbc_result_all (&resultat,$fila,$columna)
Retorna el contingut parcial d'una sentència SQL corresponent a l'objecte de la fila i columna seleccionades per l'usuari/ària. A diferència de mysql_fetch_array, només retorna un valor.
   
mysql_free_result ($resul) odbc_free_result($resul)
Allibera l'espai on ha emmagatzemat el resutat de la sentència SQL.
   
   
  Relacionem altres funcions PHP sobre el MySQL.
   
 
mysql_change_user ($usuari, $contrasenya)  
Modifica l'usuari actual pel nou usuari.
   
mysql_create_db ($base_de_dades)  
Crea una nova base de dades sobre el sistema.
   
mysql_drop_db ($base_de_dades)  
Elimina una base de dades i les taules que la componen.
   
mysql_inser_id ($resultat)  
Retorna el valor generat en inserir un registre que conté un valor del tipus 'Auto increment' en algun dels seus camps.
   
mysql_get_client_info( )  
Retorna la versió del client. Aquesta funció és operativa a partir de la versio 4.0.5 del PHP.
   
mysql_get_host_info( )  
Retorna informació de l'estat de la connexió i del servidor.
   
mysql_get_proto_info( )  
Retorna informació relacionada amb el protocol utlitzat en la connexió.
   
  Ara extraureu de la taula professor els noms dels professors que conté. El protocol que s'ha de seguir sempre és el mateix: establir la connexió amb el servidor de bases de dades, seleccionar la base de dades de treball i enviar la comanda SQL. El resultat queda emmagatzemat en una variable de memòria del tipus array. A partir d'aquest moment, ja podeu treballar amb les dades o presentar-les a pantalla.
   
Pràctica
Podeu trobar el codi del fitxer següent a la carpeta fitxers/m4/m4p51.php. Recordeu que és recomanable que obriu el fitxer amb l'editor de codi, ja que acoloreix el codi HTML i el codi PHP, i el funcionament resulta més entenedor. A més, si passeu per damunt d'una funció mysql, segons l'editor us donarà informació dels paràmetres relacionats amb la funció, o bé prement F1.
   

Veure codi

Executar codi

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<?php
/*--------------------------------------------------
* Mòdul: 4 Pràctica: 5.1. Fitxer: m4p51.php
* Autor: D116 Data:
* Descripció: Connexió MySQL amb funcions natives
* Pre condi.: Servidor MySQL, BD tutoria
* Post cond.:
--------------------------------------------------*/
?>
<title>Mòdul 4.Pràctica 5.1</title>
</head>
<body>
<?php
/* Establim connexió amb el servidor de BD(host,usuari,contrasenya*/
$conn=mysql_connect("localhost","root","");
/* Identifiquem la base de dades que volem utilitzar */
$err_db=mysql_select_db("tutoria");
/* Establim la comanda SQL que volem executar
consultem els noms dels professors */
$sql="select nom from professor" ;
/* A $resul ens guardem el resultat de la consulta */
if ( ! $resul=mysql_query($sql)) {
echo "No s'ha pogut realitzar la consulta";
echo mysql_error();
exit;
}
echo " Connexió a Servidor MySQL. BD:Tutoria Taula:professor <br>" ;
echo " La consulta executada és : <b> $sql <b> <br>";
echo " Els noms són : <br> ";

/* Recorrem l'array de resultat per mostrar valors en pantalla.*/
while ($arr_resul= mysql_fetch_array($resul)){
print ($arr_resul[0]."<br>");
}
/* Alliberem l'espai de memòria ocupat pel resultat de la consulta */
mysql_free_result($resul);
// Tanquem connexió amb el servidor de BD
mysql_close();
?>
</body>
</html>

  Llistat 4.5.1. Codi del fitxer m4p51.php
   
  A la figura següent podeu observar el resultat de l'execució del codi PHP:
   
 

Figura 4.5.1. Resultat de l'execució del fitxer m4p51.php

   
  Podeu observar que extraure informació d'una base de dades i exposar-la com una pàgina web és realment molt fàcil. De moment ens quedem aquí, ja que en el proper mòdul aprofundirem més sobre aquest tema.
   
  Les comandes natives del PHP per accedir al MySQL les podeu trobar ampliades en qualsevol llibre o manual del PHP en format paper o electrònic, a l'apartat que els dedica la pàgina oficial del PHP i fins i tot a l'ajuda del Maguma amb tot tipus de detalls i exemples de funcionament.
   
  Ara repetireu la mateixa operació de la figura 4.5.1, però extraureu les dades des de l'Acces a partir de l'ODBC que s'ha instal·lat a la pràctica 2 d'aquest mateix mòdul. Recordeu que s'ha anomenat la connexió DSN d116_tutoria. El següent programa no funcionarà si no teniu l'Acces instal·lat a l'ordinador i creada la connexió d116_tutoria a l'ODBC.
   
Veure codi <!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html><head>
<?php
/*--------------------------------------------------
* Mòdul: 4 Pràctica: 5.2. Fitxer: m4p52.php
* Autor: D116 Data:
* Descripció: Connexió Accés per ODBC
* Pre condi.: ODBC DSN d116_tutoria
* Post cond.:
--------------------------------------------------*/
?>
<title>Mòdul 4.Pràctica 5.2</title>
</head>
<body>
<?php
/* Establim connexió amb Accés per ODBC (DSN,usuari,contrasenya*/
$conn=odbc_connect("d116_tutoria","root","");
/* Establim la comanda SQL que volem executar
consultem els noms dels professors */
$sql="select nom from professor" ;
/* A $resul ens guardem el resultat de la consulta */
if ( ! $resul=odbc_exec($conn,$sql)) {
echo "No s'ha pogut realitzar la consulta";
echo odbc_error($conn);
exit;
}
echo " Connexió Accés per ODBC. DSN :D116_tutoria <br>" ;
echo " La consulta executada és : <b> $sql <b> <br>";
echo " Els noms són : <br> ";
// Recorrem l'array de resultat per mostrar valors en // pantalla.
while ($rc = odbc_fetch_into($resul,$arr_resul)){
print($arr_resul[0]."<br>");
}
// Alliberem l'espai de memòria ocupat pel resultat de // la consulta
odbc_free_result($resul);
// Tanquem connexió amb el servidor de BD
odbc_close($conn);
?>
</body>
</html>
  Llistat 4.5.2. Codi del fitxer m4p52.php
   
  Observeu que els canvis entre m4p51.php i m4p52.php són mínims, només afecten les instruccions que accedeixen sobre els orígens de les dades. A l'ajuda del Maguma podeu trobar més informació sobre les funcions ODBC.
   
Atenció !
En el cas que vulgueu treballar amb l'ODBC, l'Oracle, l'mSQL o altres motors de bases de dades, heu d'adreçar-vos a l'apartat corresponent del manual del PHP per obtenir informació de quines són les funcions o instruccions concretes que s'han d'utilitzar en cada cas. Per evitar-ho, en el proper mòdul treballareu amb una llibreria abstracta de connexió a qualsevol motor de base de dades, sense necessitat de modificar el codi per un canvi o modificació del servidor de base de dades.
   
   
Atenció !
Per extreure dades d'una base de dades en Access, ho fareu a través de l'ODBC com heu vist anteriorment. Si el que necessiteu és extreure dades d'un fitxer en Excel senzill, ho fareu també amb l'ODBC, però en crear el DSN escollireu el controlador de l'Excel.
   
Atenció !
En el cas que el fitxer Excel que voleu tractar contingui formats de cel·les, operacions o autofiltres, és recomanable crear en Access una taula en blanc i vincular-la al fitxer Excel que voleu enllaçar, i després extreure les dades mitjançant l'ODBC connectat a la taula vinculada en Access que heu creat.
 
Enrera
  Pràctica
1
2
3
4
5
Exercicis
Exercicis