Paieška


print PDF
Susiejimas su MySQL

Įvadas

PHP gali lengvai susijungti su daugeliu duomenų bazių. Jeigu PHP tiesiogiai nepalaiko duomenų bazės, galima naudoti ODBC tvarkyklę, standartinę tvarkyklę, skirtą bendravimui su duomenų bazėmis.

Bendravimas su duomenų bazėmis vykdomas SQL užklausomis, 4-os kartos kalba, dar žinoma kaip DBVS.

Žemiau pateiktuose pavyzdžiuose naudojama MySQL duomenų bazių valdymo sistema, kadangi ji yra nemokama, sparti ir greita SGBD, veikianti Linux aplinkoje. Dauguma žiniatinklio serverių (pvz., stebuklingasis Apache) taip pat dirba Linux aplinkoje, todėl MySQL yra dažniausiai su PHP naudojama DBVS.

Kintamųjų deklaravimas

Pirmas žingsnis jungiantis prie DBVS yra kintamųjų deklaravimas (jie naudojami jungimosi prie bazės funkcijos parametruose)

$user: vartotojo vardas
$passwd: slaptažodis
$host: mazgas (kompiuterio, kuriame saugoma DB, pavadinimas arba IP)
$bdd: duomenų bazės pavadinimas


Priminimas: lankytojai kintamųjų reikšmių nematys, kadangi PHP scenarijai vykdomi žiniatinklio serverio pusėje.

Iš tiesų šie kintamieji yra funkcijos, besijungiančios prie duomenų bazės, parametrai. Šių kintamųjų reikšmes galima suteikti tiesiogiai kiekvienai funkcijai, kuri kreipiasi į duomenų bazę, o ne per kintamuosius, tačiau kai reikės visose į duomenų bazėse besikreipiančiose funkcijose pakeisti, pvz., slaptažodį, tai užtruks be galo ilgai. Todėl rekomenduojame naudoti kintamuosius ir saugoti jų reikšmes viename faile, tokiu atveju tereikės vieną kartą pakeisti duomenis ir visos funkcijos iškart atsinaujins.

Pagrindinės funkcijos

PHP siūlo didelį pasirinkimą funkcijų, skirtų darbui su duomenų bazėmis. Tačiau tarp visų tokių funkcijų tik keturios yra pagrindinės:

  • Prisijungimo prie serverio funkcija
  • Duomenų bazės parinkimo funkcija
  • Užklausų funkcija
  • Atsijungimo funkcija.

MySQL DBVS tokios funkcijos yra (atitinkamai): mysql_connect, mysql_select_db, mysql_query, mysql_close.

Klaidų valdymas

Kai kurios funkcijos grąžina jungties būklę, todėl esant reikalui galima sustabdyti scenarijaus vykdymą, kad būtų išvengta klaidų. Galimi du tikrinimo ir stabdymo būdai:

Funkcijos vykdymo rezultatas saugomas kintamajame. Pavyzdžiui:
$connect = mysql_connect($host,$user,$passwd);

die() funkcijos naudojimas kilus vykdymo problemoms. Jeigu funkcija grąžina reikšmę 0 (pvz., dėl klaidos), funkcija die () grąžina klaidos pranešimą. Pavyzdžiui:
mysql_connect($host,$user,$passwd) or die("Nepavyko susijungti su serveriu $host");


Apdorojimo rezultatai

Išrinkimo užklausa atliekama naudojant mysql_query funkciją. Labai svarbu išsaugoti užklausos rezultatus (įrašus) kintamąjame, paprastai jis pavadinamas $result.

Tačiau toks įrašo panaudojimas kintamajame ne visada būna tinkamas, kadangi kintamasis negali būti naudojamas toks, koks yra. Todėl naudosime funkciją function mysql_fetch_row(), kuri suskaidys gautas eilutes stulpeliais (pvz., į vardo, adreso ir t.t. stulpelius) bei susies juos su kintamu masyvu tokia tvarka, kokia jie buvo pateikti.

Pavyzdžiui, įsivaizduokime, kad turime lentelę „nuorodos“, kurioje saugomi svetainių pavadinimai ir URL. Galima gauti visus įrašus ir atvaizduoti juos masyve.

<html>
<head>
<title>Nuorodos</title>
<head>
<body>

<table border="1" cellpadding="0" cellspacing="0">

<tr>
<th>Svetainės pavadinimas</th>
<th>URL</th>
</tr>

<?php
/* Jungimosi parametrų deklaravimas */
$host = sql_serveris;
/* dažnai tai būna localhost
Nurodykite serverį, kuriame saugoma duomenų bazė */
$user = prisijungimo_vardas;
$db = duomenų_bazė;
$passwd = Slaptažodis;

/* Prisijungimas prie serverio */
mysql_connect($host, $user,$passwd) or die("Nepavyko susijungti su MySQL serveriu!");
mysql_select_db($db) or die("Negalima prisijungti prie duomenų bazės");

/* Užklausos kūrimas ir siuntimas */
$query = "SELECT pavadinimas,url FROM nuorodos ORDER BY pavadinimas";
$result = mysql_query($query);

/* Rezultatų rūšiavimas */
while($row = mysql_fetch_row($result)){
$Pavadinimas = $row[0];
$Url = $row[1];
echo "<tr>

<td><a href="$Url">$Pavadinimas</a></td>

<td>$Url</td>

</tr>
";
}

/* Atsijungimas nuo duomenų bazės */
mysql_close();
?>

</tr>
</table>
</body>
</html>


Aukščiau pateiktame pavyzdyje užklausos grąžina pavadinimą ir URL. Funkcija mysql_fetch_row() analizuoja kiekvieną rezultato eilutę ir išsaugo jos stulpelius masyve "row[]". Taigi, pavadinimo laukelis saugomas masyvo elemente row0, o URL - elemente row1. Jeigu norite, kad būtų apdoroti visų eilučių rezultatai, įtraukite mysql_fetch_row() funkciją į ciklą while. Kai neliks eilučių, skirtų apdorojimui, ciklas while baigsis ir bus vykdomi sekantys žingsniai.

Tuščio rezultato aptikimas

Prieš įrašant duomenis į lentelę gali būti naudinga juos patikrinti, kad išvengtumėte dubliavimo. Tai padarysite naudodami SQL užklausas SELECT ir WHERE, kurių naudojimas kartu įgalina rezultatų tikrinimą pagal tam tikrus kriterijus. rezultato neatitikimas grąžina reikšmę null. Toliau pateikiamas pavyzdys, kuriame rezultatas rodomas tik kai jis nėra tuščias ir jei reultatas tuščias, matomas klaidos pranešimas (HTML kodas, į kurį reikia įterpti PHP kodą, tyčia buvo „užmirštas“).

<?php

/* Prisijungimo parametrų deklaravimas */
$host = sql_serveris;
/* Dažniausiai tai localhost
Įveskite serverio, kuriame saugoma duomenų bazė, pavadinimą arba IP */

$user = <xxx>Prisijungimo_vardas</xxx>;
$bdd = <xxx>Duomenų_bazė</xxx>;
$passwd = <xxx>Slaptažodis</xxx>;

/* Prisijungimas prie serverio */
mysql_connect($host, $user,$passwd) or die("Nepavyko prisijungti prie serverio");
mysql_select_db($bdd) or die("Nepavyko susijungti su duomenų baze");

/* Užklausos kūrimas ir siuntimas*/
$query = "SELECT pavadinimas,url FROM nuorodos ORDER BY pavadinimas";
$result = mysql_query($query);

/*Rezultatų gavimas */
if (!mysql_fetch_row($result)) {
echo "Nėra užklausą atitinkančių rezultatų";
}
else {
while($row = mysql_fetch_row($result)){
$Name = $row[0];
$Url = $row[1];
echo "<tr>

<td><a href="$Url">$Name</a></td>

<td>$Url</td>

</tr>
";
}
}

/*Atsijungimas nuo duomenų bazės */
mysql_close();
?>