ÚS DE PHP AMB MySQL. CONSULTES BÀSIQUES

 

Aquestes pròximes entregues no pretenen ser un manual de MySQL encara que sí explicarem com realitzar consultes bàsiques des de PHP. Veurem algunes funcions bàsiques per accedir a una base de dades MySQL des de PHP per recuperar informació, inserir informació o esborrar informació.

 

Descriurem una sèrie de funcions bàsiques que ens serviran per il·lustrar com utilitzar PHP per realitzar consultes a una base de dades: afegir nous registres, actualitzar registres, esborrar registres, etc. No estudiarem en profunditat les bases de dades ni el llenguatge SQL.Anem a tractar de ser pràctics, conèixer algunes funcions per accedir a bases de dades amb PHP i aprendre a usar-les a través d'exemples.

Una qüestió a comentar és que l'accés a base de dades amb PHP admet dues formes diferents: les funcions tipus mysql, per exemple mysql_connect, són les més antigues, l'ús es desaconsella si s'està treballant amb un ordinador amb una versió de MySql moderna . Les funcions tipus mysqli, per exemple mysqli_connect, són les més modernes, l'ús es recomana sempre que s'estigui treballant amb servidors actualitzats. Les funcions mysqli poden escriure de dues maneres: amb estil orientat a objectes o amb estil per procediments. Nosaltres anem a veure com utilitzar aquestes funcions amb l'estil per procediments, que és més senzill inicialment.

 

FUNCIÓ mysqli_connect (mysql_connect)

Aquesta funció ens permet crear una connexió amb una base de dades concreta.

La sintaxi que farem servir per aquesta funció és:

$ NomConnexio=mysqli_connect($nom d'amfitrió, $nom_usuari, $contrasenya);

Per servidors no actualitzades usar mysql_connect en lloc de mysqli_connect

La funció retorna una connexió emmagatzemada en la variable $ nombreConexion, o FALSE en cas d'error. Els paràmetres que hem indicat són:

$hostname és un nom de servidor (dada que hem de consultar en el nostre compte de hosting).

$nom_usuari és el nom d'usuari de base de dades, nom que haurem especificat en crear la base de dades (si no ho hem fet, pot ser el mateix que per accedir a cPanel o root).

$contrasenya és la contrasenya d'accés per a l'usuari de base de dades, contrasenya que haurem especificat en crear la base de dades (si no ho hem fet, pot ser la mateixa que per accedir a cPanel o root).

Aquesta funció l'entendrem millor amb l'exemple que veurem més endavant.

 

FUNCIÓ mysqli_close (mysql_close)

Aquesta funció ens permet tancar la connexió amb una base de dades anteriorment oberta. Sempre és recomanable tancar una connexió quan haguem acabat d'usar-la.

La sintaxi que farem servir és:

mysqli_close($nomConexión);

Per servidors no actualitzades usar mysql_close en lloc de mysqli_close

La funció torna TRUE si s'ha tancat correctament o FALSE en cas d'errror.

L'identificador o nom de connexió serà aquell que hàgim obtingut prèviament usant la funció mysqli_connect.

Aquesta funció l'entendrem millor amb l'exemple que veurem més endavant.

 

FUNCIÓ mysqli_select_db (mysql_ select_db)

Aquesta funció ens permet seleccionar una base de dades concreta dins de totes les existents en el servidor al qual ens connectem.

La sintaxi que farem servir és:

mysqli_ select_db($nomConexión, $nomBaseDades);

Per servidors no actualitzades utilitzar mysql_select_db($nomBaseDades, $nomConexión);

La funció torna TRUE si s'ha realitzat la selecció correctament o FALSE en cas d'errror.

El nom de connexió serà aquell que hàgim obtingut prèviament amb la funció mysqli_connect.

Aquesta funció l'entendrem millor amb l'exemple que veurem més endavant.

 

FUNCIÓ mysqli_query (mysql_query)

Aquesta funció ens permet executar una consulta a la base de dades que especifiquem.

La sintaxi que emprarem és:

$resultat=mysqli_query($nomConnexio,"Consulta aquí";

o mysqli_query($nomConnexio,$consulta);

Per servidors no actualitzades usar

$result=mysql_query("Consulta aquí", $nomConnexio);

On "Consulta aquí" es refereix a una consulta realitzada utilitzant el llenguatge SQL de consultes a bases de dades, per exemple una consulta pot ser "SELECT * FROM agenda", que podria traduir-se com "selecciona totes les files de la taula agenda".

Aquesta funció retorna TRUE o FALSE per indicar si les operacions UPDATE, INSERT o DELETE han tingut èxit. Per a l'operació SELECT retorna un nou identificador de resultat. 

UPDATE significa "actualitzar",

INSERT significa "inserir" i

DELETE significa "ESBORRAR". 

SELECT significa "seleccionar".

El nom de connexió serà aquell que hàgim obtingut prèviament amb la funció mysqli_connect.

Aquesta funció l'entendrem millor amb l'exemple que veurem més endavant.

 

RECUPERAR UN RESULTAT: data_seek, fetch_array (mysql_result)

Una sentència de consulta normalment retorna "un conjunt de resultats" que segons l'exemple de sintaxi anterior tindríem en una variable anomenada $result. Per exemple, podríem tenir com a resultats d'una consulta el següent:

nom

cognoms

direccion

telèfon

edat

alçada

Manuel Jesús

López de la Rosa

C / Joan Baptista Nº 3

658954875

32

1.80

Maria

Manzano Caps

C / Arc del triomf Nº 7

695001002

19

1.99

La qüestió que ens plantegem ara és: Com extreure la dada d'una cel·la concreta? Per exemple el nom de la primera fila?

Per a això, usant la sintaxi mysqli escriuríem això:

mysqli_data_seek($resultat, numeroDeFila); 

o també vàlid 

$result->data_seek(numeroDeFila);

$Extret=mysqli_fetch_array($result);

o també vàlid 

$extret=$result->fetch_array();

Aquí estem donant dos passos: una sentència com mysqli_data_seek ($result, 0); significaria "posiciona't a la fila 0 dels resultats" (la primera fila).

També és vàlid escriure $result->data_seek(0); que té el mateix efecte. Si escrivíssim $result->data_seek(15); signficaría "posiciona't a la fila 16 dels resultats" (tenir en compte que es comença a comptar per zero, per aquest motiu 0, 1, 2, ..., 15 resulten 16 files).

La sentència $extret=mysqli_fetch_array($result); indica que els valors existents a la fila s'introdueixin en un array els índexs en principi poden ser tant associatius (el nom de la columna) com numèrics (començant per zero). Per exemple si la primera columna a la taula de la base de dades és << ciutat >> podem usar $extret ['ciutat'] per accedir al valor existent a la fila amb la qual estiguem treballant per a la columna ciutat. Igualment podríem usar $extret[0] per referir-nos a la primera columna, $extret[1] per referir-nos a la segona columna, $extret[2] per referir-nos a la tercera columna i així successivament.

 

 

Sintaxi mysql: mysql_result

En servidors no actualitzades es pot utilitzar la funció mysql_result encara que al no pertànyer a la sèrie de funcions mysqli no està recomanat el seu ús.

La Sintaxi és: mysql_result ($resultat, $numeroDeFila "identificadorDeLaColumna");

Aquesta funció ens retorna el contingut de la cel·la a la fila i columna indicades en forma de string (cadena de caràcters) en cas d'èxit, o FALSE en cas d'error.

$Result és el resultat obtingut prèviament amb una invocació a la funció mysql_query.

numeroDeFila és un número de fila dins el resultat obtingut tenint en compte que els números de fila s'expliquen començant des de zero.

identificadorDeLaColumna pot ser l'índex del camp(per exemple 0), el nom del camp (per exemple ciutat), o el nom de la taula punt nom del camp (per exemple agenda.ciutat)

Finalment, es pot especificar el nom del camp que volem extreure dins de la fila (això és opcional). Aquesta funció l'entendrem millor amb l'exemple que veurem a continuació.

 

EXEMPLE D'ÚS DE LES FUNCIONS ANTERIORS.

Escriu aquest codi en un editor i guarda'l en un arxiu de nom ejemplo1.php (recorda que abans has d'haver creat la base de dades i creat dades d'exemple com hem vist anteriorment). Recorda també que has de canviar i posar els teus propis valors en les funcions mysqli_connect i mysqli_select_db.

<html> <head> <meta charset = "utf-8"> </ head>

<body>

<? Php

$link=mysqli_connect ("sql203.byethost7.com "," b7_10356956 "," ***** ");

mysqli_select_db($ enllaç, "b7_10356956_mibasededatos");

$titlles=$link->query("SET NAMES 'utf8'"); // Perquè es mostrin els accents

$resultat=mysqli_query($enllaç,"SELECT * FROM agenda");

mysqli_data_seek($resultat,0);

$extret=mysqli_fetch_array($resultat);

echo "- Nom:". $extret['nom']. "<br/>";

echo "- Cognoms:". $extret['cognoms']. "<br/>";

echo "- Adreça:". $extret['adreça']. "<br/>";

echo "- Telèfon:" $extret['telefon'] "<br/>"; ..

echo "- Edat:". $extret['edat']. "<br/>";

mysqli_free_result($resultat);

mysqli_close($enllaç);

?>

</body>

</html>

El codi amb la sintaxi que no usa mysqli(no recomanat) seria:

<html>

<body>

<? Php

$link=mysql_connect ("sql203.byethost7.com","b7_10356956","*****");

mysql_select_db ("b7_10356956_mibasededatos", $enllaç);

mysql_query("SET NAMES 'utf8'"); // Perquè es mostrin els accents

$resultat=mysql_query("SELECT * FROM agenda", $enllaç);

echo "Nom:" .mysql_result($resultat,0,"nom") "a" ;.

echo "Cognoms:" .mysql_result($resultat,0,"cognoms") "a" ;.

echo "Adreça:" .mysql_result($resultat,0,"adreça") "a" ;.

echo "Telèfon:" mysql_result($resultat,0,"telefon") "a"; ..

echo "Edat:" mysql_result($resultat,0,"edat") "a"; ..

echo "Alçada:" mysql_result($resultat,0,"altura") "a"; ..

mysql_free_result($resultat);

mysql_close($enllaç);

?>

</body>

</html>

En aquest codi el que hem fet és fer servir les funcions vistes anteriorment i la base de dades i taules que vam crear en anteriors apartats del curs. Amb tot això el que fem és realitzar una consulta a la base de dades i mostrar els resultats per pantalla.

Interpretem les línies que hem escrit:

$link=mysqli_connect("sql203.byethost7.com","b7_10356956", "*****");

Amb aquesta línia introduïm l'identificador de connexió en una variable anomenada $link. Invoquem la funció mysqli_connect passant-li com a paràmetres el nom del hosting, el nom d'usuari i la contrasenya. Aquestes dades hem conèixer-(o consultar) prèviament.

mysqli_select_db($enllaç,"b7_10356956_mibasededatos");

Amb aquesta línia seleccionem la base de dades passant-li a la funció com a paràmetres l'identificador de connexió (que hem obtingut i guardat en una variable prèviament) i el nom de base de dades.

$resultat=mysqli_query($enllaç,"SELECT * FROM agenda");

Amb aquesta línia seleccionem tots els registres (files) i camps (columnes) existents en la nostra base de dades. Per seleccionar tots els registres escrivim SELECT *. A continuació indiquem la taula de la qual volem obtenir aquests registres i això ho expressem amb la sintaxi FROM agenda, sent agenda el nom de la taula a la base de dades. A la crida a la funció incluirmos l'identificador de connexió que hem obtingut prèviament.

Amb la sentència mysqli_data_seek ($result,0); ens situem a la primera fila (fila zero) dels resultats de la consulta.

Amb la sentència $extret=mysqli_fetch_array($result); introduïm en un array al que anomenem $extret les dades de la fila zero obtinguts de la consulta.

Finalment vam mostrar per pantalla els resultats.

En la versió que no usa mysqli (no recomanada) amb la sentència mysql_result($result,0,"nom") obtenim el camp "nom" del primer registre (registre 0) del resultat de la consulta que hem emmagatzemat prèviament en $result .

El resultat d'invocar l'arxiu que hem creat serà que se'ns mostri per pantalla el nom, cognoms, adreça, telèfon, edat i alçada emmagatzemats a la primera fila de la nostra base de dades. Una cosa similar a això:

Resumint el que hem fet, hem fet servir la funció mysqli_connect(), que obre una connexió amb el servidor MySQL en el Host especificat (en aquest exemple la màquina on està allotjada al servidor MySQL és sql203.byethost7.com, però tu hauràs d'introduir el teu propi dada).També hem especificat un usuari (b7_10356956 en aquest exemple, però tu hauràs d'introduir el teu propi dada), i un password per a l'usuari indicat (hauràs d'escriure el teu password d'usuari de base de dades).

Si la connexió ha tingut èxit, la funció mysqli_connect() retorna un identificador d'aquesta connexió que és emmagatzemat en la variable $link. Si no tingués èxit, retorna 0 (FALSE).

Amb mysqli_select_db() PHP li hem dit al servidor que en la connexió $link ens volem connectar a la base de dades indicada.

La següent funció mysqli_query(), usant l'identificador de la connexió ($link), envia una instrucció SQL al servidor MySQL perquè aquest la processi. El resultat d'aquesta operació és emmagatzemat en la variable $result.

Finalment, vam triar la fila de resultats zero amb mysqli_data_seek($result,0); i guardem els resultats d'aquesta fila en una matriu amb $extret=mysqli_fetch_array($result);. Si volguéssim mostrar els següents registres hauríem d'incloure instruccions amb els números 1, 2, ...

La sentència mysqli_free_result($result); allibera la connexió establerta amb la base de dades.

La sentència mysqli_close($link); tanca la connexió amb la base de dades.

 

* Nota: Si tenim algun problema en localitzar la informació del nostre proveïdor (nom de base de dades, usuari, etc.). recordar que aquesta informació normalment està disponible al tauler de control del servidor (cpanel o similar) tal com vam veure en lliuraments anteriors.

Al tauler de control que estem fent servir nosaltres per aquest exemple, si baixem amb l'scroll cap avall, després de la informació ftp que ens apareix marcada amb un requadre vermell, apareixerà la informació relativa al servidor de base de dades. Si estàs utilitzant un altre tauler de control, hauràs de buscar el lloc específic on figura aquesta informació.

 

EXERCICI

Utilitzant la taula << ciutats >> que hem creat per a l'exercici del lliurament anterior del curs, el contingut era:

identificació

ciutat

pares

habitants

superfície

tieneMetro

1

Mèxic DF

Mèxic

555.666

23.434,34

1

2

Barcelona

Espanya

444.333

1111.11

0

3

Buenos Aires

Argentina

888.111

333.33

1

4

Medellín

Colòmbia

999.222

888.88

0

5

Lima

Perú

999.111

222.22

0

6

Caracas

Veneçuela

111.222

111.11

1

7

Santiago

Xile

777.666

222.22

1

8

Antiga

Guatemala

444.222

877.33

0

9

Quito

Equador

333111

999.11

1

10

L'Havana

Cuba

111.222

333.11

0

Crea un arxiu php on es realitzi una consulta a la base de dades per extreure totes les dades de la taula ia continuació mostra per pantalla els valors de país i ciutat de cada fila.

Exemple de resultats a obtenir:

Els resultats de la consulta a la base de dades són les següents:

País: Mèxic --- Ciutat: Mèxic DF

País: Espanya --- Ciutat: Barcelona

País: Argentina --- Ciutat: Buenos Aires

...

...

País: Cuba --- Ciutat: l'Havana