3 metode za povezavo z MySQL s PHP s primeri kode
Če želite začeti uporabljati bazo podatkov MySQL, morate najprej razumeti, kako se iz svojega prilagojenega PHP programa (skripta) povezati s prav to bazo podatkov MySQL.
Ta članek opisuje naslednje tri metode, skupaj z ustreznimi primeri kode PHP, ki pojasnjujejo, kako se povezati s svojo zbirko podatkov iz PHP.
Za vse spodnje primere se bomo povezovali z obstoječo bazo podatkov MySQL. Opomba: Vse, kar je razloženo tukaj, bo delovalo tudi z MariaDB, tako kot MySQL.
1. Povezovanje s PHP z uporabo razširitve mysqli
*mysqli pomeni izboljšan MySQL
Ustvarite naslednjo datoteko mysqli.php
connect_error) ( die("Napaka: ni mogoče vzpostaviti povezave: " . $conn->connect_error); ) echo "Povezan z bazo podatkov.
"; $result = $conn->query("SELECT id FROM goroda"); echo "Število vrstic: $result->num_rows"; $result->close(); $conn->close(); ?> V zgornji kodi:
Povezan z bazo podatkov. Število vrstic: 6 2. Povezava iz razširitve PHP MySQL PDO
*PDO pomeni PHP Data Objects
Gonilnik PDO_MYSQL implementira vmesnik PDO, ki ga nudi PHP za povezavo iz vašega PHP skripta v bazo podatkov MySQL.
Ustvarite naslednjo datoteko mysql-pdo.php:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Povezan z bazo podatkov.
"; $sql = "IZBERI id IZ goroda"; print "Seznam id:
"; foreach ($conn->query($sql) as $row) ( print $row["id"] . "
"; ) $conn = null; ) catch(PDOException $err) ( echo "Napaka: ni mogoče vzpostaviti povezave: ". $err->getMessage(); ) ?> V zgornjem:
Povezan z bazo podatkov. ID seznama: 1 2 3 4 5 6 3. Povezava iz PHP z uporabo zastarelih funkcij mysql
To metodo uporabite le, če uporabljate starejšo različico PHP in iz nekega razloga ne morete nadgraditi na novo različico. Priporočljivo je, da namesto te metode uporabite zgoraj prikazani metodi št. 2 in metodi št. 3. To metodo sem vključil samo kot referenco in ne kot priporočilo za uporabo.
Ta posebna razširitev je bila opuščena od PHP 5.5. Toda od PHP 7.0 to sploh ne bo delovalo, saj je bilo odstranjeno. Od PHP 5.5 dalje, ko uporabljate te funkcije, bo ustvarila napako E_DEPRECATED.
Ustvarite datoteko mysql.php:
"; $result = mysql_query("SELECT id FROM goroda"); $row = mysql_fetch_row($result); echo "id 1: ", $row, "
\n"; mysql_close($conn); ?> V zgornjem:
Povezan z bazo podatkov. id 1: 1 Tako se lahko povežete z MySQL. Ponavljam, bolje je uporabiti prvi dve metodi; O
Da bi kar najbolje izkoristili svojo bazo podatkov MySQL, je pomembno razumeti, kako se povezati iz programa PHP po meri z bazo podatkov MySQL.
Ta vadnica opisuje naslednje tri metode skupaj z ustreznim primerom programa PHP, ki pojasnjuje, kako se s pomočjo PHP-ja povežete z bazo podatkov.
Če želite to narediti, morate namestiti paket PHP-MySQL.
Na podlagi distribucije RedHat, vključno z , uporabite yum za namestitev PHP-MySQL, kot je prikazano spodaj.
Yum namestite php-mysql
Odvisno od vašega sistema bomo namestili ali posodobili naslednje odvisnosti zgoraj:
Ko je vse nameščeno, bo stran phpinfo prikazala modul MySQL, kot je prikazano spodaj:
Za vse spodnje primere se bomo povezovali z bazo podatkov MySQL, ki že obstaja. Če še niste spoznali MySQL, je to dobro mesto za začetek: .
Opomba: Vse, kar je tukaj opisano, bo delovalo tudi z MariaDB, tako kot deluje z MySQL.
MySQLi pomeni MySQL Improved.
Upoštevajte, da je v večini distribucij (npr. CentOS) PHP-MySQLi že del paketa PHP-MySQL. Tako vam ni treba iskati in nameščati paketa PHP-MySQLi. Vse kar morate storiti je, da namestite paket PHP-MySQL, da dobite delujočo razširitev Mysqli v vašem sistemu.
Ustvarite naslednjo datoteko mysqli.php v DocumentRoot v Apache:
connect_error) ( die("Napaka: ni mogoče vzpostaviti povezave: " . $conn->connect_error); ) echo "Povezovanje z bazo podatkov.
"; $result = $conn->query("IZBERI ime OD zaposlenega"); echo "Število vrstic: $result->num_rows"; $result->close(); $conn->close(); ?>
V zgornjem:
Povežite se z bazo podatkov. Število vrstic: 4
Opomba: Če se poskušate povezati z oddaljeno bazo podatkov MySQL, lahko to storite, da se izognete napaki zavrnjene povezave gostitelja: Kako dovoliti odjemalcu MySQL, da se poveže z oddaljenim strežnikom MySQL.
PDO pomeni PHP Data Objects.
PDO_MYSQL implementira vmesnik PDO, ki ga nudi PHP za povezovanje programa z bazo podatkov MySQL.
V večini distribucij Linuxa (kot sta CentOS in RedHat) je paket PHP-PDO že vključen v paket PHP-MySQL. Tako vam ni treba iskati in namestiti paketa PHP-PDO. Vse kar morate storiti je, da namestite paket PHP-MySQL, da dobite delujočo razširitev PHP PDO_MYSQL v vašem sistemu.
Ustvarite naslednjo datoteko MySQL-pdo.php v vašem Apache DocumentRoot:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Povezovanje z bazo podatkov.
"; $sql = "IZBERI ime OD zaposlenega"; natisni "Ime zaposlenega:
"; foreach ($conn->query($sql) as $row) ( print $row["name"] . "
"; ) $conn = null; ) catch(PDOException $err) ( echo "Napaka: ni mogoče vzpostaviti povezave: ". $err->getMessage(); ) ?>
V zgornjem:
Ko pokličete mysqli.php iz svojega brskalnika, boste videli naslednji rezultat, ki nakazuje, da se je PHP lahko povezal z bazo podatkov MySQL in pridobil podatke.
Povežite se z bazo podatkov. Ime zaposlenega: siteslan Maria Oleg
To metodo uporabite samo, če uporabljate starejšo različico PHP in je iz nekega razloga ne morete posodobiti na novo različico.
To je podedovana razširitev PHP 5.5. Toda od različice PHP 7.0 naprej to ne bo delovalo, saj je bilo odstranjeno.
Od PHP 5.5 bodo te funkcije, ko uporabljate te funkcije, ustvarile napako E_DEPRECATED.
Ustvarite naslednjo datoteko MySQL-legacy.php pod Apache DocumentRoot:
"; $result = mysql_query("IZBERI ime IZ zaposlenega"); $row = mysql_fetch_row($result); echo "Zaposleni 1: ", $row, "
\n"; mysql_close($conn); ?>
V zgornjem:
Ko iz svojega brskalnika pokličete MySQL-legacy.php, boste videli naslednji rezultat, ki nakazuje, da se je PHP lahko povezal z bazo podatkov MySQL in pridobil podatke.
Povežite se z bazo podatkov. Zaposleni 1: AndreyEx
V tem današnjem članku bomo govorili o ustvarjanju povezave z bazo podatkov in razpravljali o tem, katero možnost je bolje uporabiti proceduralno ali objektno usmerjeno. Najprej poglejmo na kateri stopnji smo, če je to stopnja popolnega začetnika, potem je moj nasvet brez izjeme, da začnete uporabljati proceduralni stil povezovanja z bazo. Prej sem napisal članek o tej temi na svojem blogu; za več informacij o proceduralnem slogu povezovanja z bazo podatkov preberite članek: "Kako se povezati z MySQL s pomočjo PHP". Če že imate nekaj izkušenj z delom s proceduralnim slogom povezovanja z bazo podatkov, potem ste verjetno, tako kot jaz, preprosto vzeli moje projekte in jih prisilili k uporabi objektno usmerjenega pristopa.
Tako ali drugače si bomo zdaj ogledali korake konstruiranja razreda za ustvarjanje povezave z bazo podatkov MySQL v PHP. Potrebovali bomo dve datoteki PHP, v eno datoteko bomo "vstavili" razred za ustvarjanje povezave z bazo podatkov, v drugi pa bomo delali s tem razredom.
Ustvarimo dve datoteki:
Mislim, da nismo več majhni otroci in vemo, kaj potrebujemo za delo z datotekami PHP. Nameščen spletni strežnik je Apache, PHP, MySQL DBMS in ve, kam dati te datoteke - (za tiste, ki ne vedo ali so pozabili).
Datoteko, v kateri je shranjen razred, dam v posebno datoteko in jo poimenujem v obliki: ime razreda.razred.php in vem, kaj je shranjeno v tej datoteki. Ko je v projektu veliko razredov, se lahko izgubite, zato priporočam, da datoteke poimenujete z razredi v zgoraj opisani obliki.
Datoteka Database.class.php:
Poglejmo zdaj, kaj je nastalo v tem koraku. S ključno besedo "razred", imenom razreda - DataBase in zavitimi oklepaji smo ustvarili telo razreda. V ustvarjenem razredu smo ustvarili dve lastnosti, v $mConnect - kjer je shranjen rezultat povezave z bazo in $mSelectDB - kjer je shranjen rezultat izbire baze. Morda ste opazili ključne besede v vsaki lastnosti – javne in statične. O čem govorijo? Javno pomeni, da je lastnost dostopna zunaj razreda, statična pa omogoča dostop ali klic lastnosti brez ustvarjanja primerka razreda, kar je zelo pogosto priročno pri delu.
Dodajmo metodo Connect(), da ustvarimo povezavo z bazo podatkov:
".mysql_error()."
"; exit(); return false; ) // Vrni rezultat return self::$mConnect; ) ) ?>Funkcija mysql_connect() ustvari povezavo z bazo podatkov in shrani rezultat izvedbe v $mConnect. Sledi preverjanje s konstrukcijo IF: Če povezava ni bila uspešna, prikaže sporočilo o napaki ... V nasprotnem primeru bo PHP prezrl blok IF in nadaljeval z izbiro baze podatkov. Funkcija mysql_select_db() izbere ime baze podatkov, če zahtevana baza podatkov ne obstaja v bazi, bo v tem primeru program uporabnika obvestil o napaki. Če je vse uspešno, bo povezava z bazo podatkov vrnila return.
Dodajte metodo Close():
Žal se nismo mogli povezati s strežnikom MySQL
"; exit(); return false; ) // Poskusi izbrati zbirko podatkov self::$mSelectDB = mysql_select_db($name, self::$mConnect); // Če zbirka podatkov ni izbrana, prikaže sporočilo o napaki.. if( !self::$mSelectDB) ( echo "".mysql_error()."
"; exit(); return false; ) // Vrne rezultat return self::$mConnect; ) // Metoda zapre povezavo do javne statične funkcije baze podatkov Close() ( // Vrne rezultat return mysql_close(self: :$mConnect) ) ?>Naslednja in zadnja metoda v tem razredu, Close(), zapre povezavo z bazo podatkov; funkcija mysql_close() zapre povezavo s strežnikom MySQL in vrne rezultat.
Datoteka index.php:
S funkcijo define() smo ustvarili konstante za shranjevanje parametrov povezave z bazo podatkov. Require_once vključuje naš razred DataBase v datoteko index.php.
Spomnimo se statične ključne besede, ki je bila uporabljena v razredu DataBase v lastnostih in metodah tega razreda. To nam daje možnost dostopa do lastnosti razreda in metod z uporabo "::" (dve dvopičji). Metoda DataBase::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE) zavzema 4 parametre - konstante, ki jih ustvari funkcija define(), ki hranijo informacije o povezavi z bazo podatkov. Če je povezava uspešna, nam bo metoda Connect() vrnila povezavo z bazo podatkov. Nato bomo lahko delali in izvajali poizvedbe v bazi podatkov. funkcija mysql_query() - izvede poizvedbo v bazi podatkov. Funkcija mysql_fetch_assoc() obdela vrsto rezultatov poizvedbe in vrne asociativno polje. Konstrukcija echo prikaže različico strežnika MySQL. In končno, metoda DataBase::Close() bo zaprla povezavo z bazo podatkov.
Uporaba php...
Ustvarjanje povezave z bazo podatkov v PHP na različne načine:
$conn=mysql_connect($db_hostname, $db_username, $db_password) ali die ("Ni povezave s strežnikom");
mysql_select_db($db_database,$conn) ali die ("Ne, ni bilo mogoče vzpostaviti povezave z bazo podatkov");
Razlage spremenljivk spodaj.
Uporabljajo se naslednje funkcije:
Hkrati nenehno preverjamo napake na ta način: ali umremo ("Napaka je taka in taka"); - prevedeno kot ali die s takšno in tako napako - da takoj najdejo, kje je napaka.
config.php
// spremenljivke za povezavo z bazo podatkov
$host = "lokalni gostitelj"; /gostitelj
$uporabniško ime = "root"; // geslo za povezavo z bazo podatkov
$geslo = ""; // geslo za povezavo z bazo - na lokalnem računalniku je lahko prazno.
$database_name = "my-dolgi"; // ime baze podatkov
// stari način povezovanja z bazo podatkov
mysql_connect($host, $username, $password) ali die("Ne morem vzpostaviti povezave ustvariti povezave");
// izberite bazo podatkov. Če pride do napake, izpišite
mysql_select_db($database_name) ali die(mysql_error());
index.php
require_once "config.php";
$result = mysql_query("IZBERI ime, denar IZ Dolg ORDER BY denar DESC LIMIT 5") ali die(mysql_error());
";
medtem ko ($row = mysql_fetch_assoc($result)) (
";
}
mysql_free_result($rezultat);
// Zaprite povezavo
mysql_close();
Ta metoda:
config.php
// povezave z bazo podatkov
$povezava = mysqli_connect("localhost", "uporabniško ime", "geslo", "ime-baze podatkov"); // tukaj neposredno vnesemo vaše podatke: uporabniško ime, geslo in ime baze podatkov, prvo polje je običajno localhost
// napaka izhodne povezave
če (!$povezava) (
echo "Napaka pri povezovanju z bazo podatkov. Koda napake: " . mysqli_connect_error();
izhod;
}
Upoštevajte - mysqli se uporablja povsod, ne mysql!!!
index.php
require_once "config.php";
// Izvedi zahtevo. Če je napaka, jo prikažemo
če ($ rezultat = mysqli_query(povezava $,"IZBERI ime, denar OD dolga ORDER BY denar DESC LIMIT 5")) (
Echo "Komu dolgujem v padajočem vrstnem redu:
";
// Pridobivanje rezultatov poizvedbe
medtem ko ($row = mysqli_fetch_assoc($rezultat)) (
echo $row["Ime"] . "z dolgom". $row["Money"] . " rubljev.
";
}
// sprostitev uporabljenega pomnilnika
mysqli_free_result($ rezultat);
// Zaprite povezavo
mysqli_close(povezava $);
}
Kot lahko vidite, so se nekatere točke spremenile (v poševnem tisku).
3) Objektno usmerjen način povezovanja z bazo MySQL - z uporabo metod in razredov:
Proti: Bolj zapleten in manj dovzeten za napake.
Prednosti: kratkost in priročnost za izkušene programerje.
$conn = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if($conn->connect_errno)(
die($conn->connect_error);
) else (echo "Povezava z bazo podatkov je bila uspešno vzpostavljena";)
tukaj je načeloma vse intuitivno:
config.php
// povezave z bazo podatkov
$mysqli = novo mysqli("lokalni gostitelj", "uporabniško ime", "geslo", "baza-ime-podatkov"); // tukaj neposredno vnesemo vaše podatke: uporabniško ime, geslo in ime baze podatkov, prvo polje je običajno localhost
// napaka izhodne povezave
if ($mysqli->connect_error) (
die ("Napaka povezave z DB: (" . $mysqli->connect_errno . ") " . mysqli_connect_error) ;
}
Upoštevajte - mysqli se uporablja povsod, ne mysql!!! in za razliko od prejšnje metode se prikažejo puščice “->”, ki kažejo, da gre za stil OOP.
index.php
require_once "config.php";
// Izvedi zahtevo. Če je napaka, jo prikažemo
če ($ rezultat = $ mysqli->poizvedba("IZBERI ime, denar IZ dolga ORDER BY denar DESC LIMIT 5")) (
Echo "Komu dolgujem v padajočem vrstnem redu:
";
// Pridobivanje rezultatov poizvedbe
medtem ko ($row = $result-> fetch_assoc()) {
echo $row["Ime"] . "z dolgom". $row["Money"] . " rubljev.
";
}
// sprostitev uporabljenega pomnilnika
$rezultat->zapri();
// Zaprite povezavo
$mysqli->zapri();
}
Vaša naloga je najti razlike.
Pri povezovanju z bazo podatkov MySQL se uporabljajo pripravljeni izrazi (z uporabo metode priprave) in posledično večja varnost in močno poveča zmogljivost.
konfiguracijska datoteka iz prejšnje metode! - enako
index.php
// Slog PDO za komunikacijo z MySQL
if ($stmt = $mysqli->prepare("IZBERI Ime, Voney FROM Dolg ORDER BY Money< ? LIMIT 5")) {
$stmt->bind_param("i", $summa);
$summa = 100000;
//začetek izvajanja
$stmt->izvedi();
// Deklaracija spremenljivk za pripravljene vrednosti
$stmt->bind_result($col1, $col2);
Echo "Komu dolgujem v padajočem vrstnem redu:
";
// Pridobivanje rezultatov poizvedbe
medtem ko ($stmt->fetch()) (
echo $col1. "z dolgom". $col2. " rubljev.
";
}
// sprostitev uporabljenega pomnilnika
$stmt->zapri();
// Zaprite povezavo
$mysqli->zapri();
Kot lahko vidite, je to veliko bolj zapleteno in morate preučiti ZOP - to je ločena tema.