Webfejlesztőként bizonyára találkozott már olyan forgatókönyvvel, amikor olyan összetett SQL-lekérdezéseket kellett végrehajtania, amelyek befejezéséhez több lépés szükséges. Itt jönnek jól a tárolt eljárások. A tárolt eljárások előre megírt SQL-kódok, amelyeket egyetlen függvény meghívásával lehet végrehajtani a PHP-kódból. Ebben a cikkben megnézzük, hogyan hívhatunk meg egy tárolt eljárást PHP-ből a MySQL-ben.
Először is hozzunk létre egy egyszerű tárolt eljárást a MySQL-ben. Ebben a példában egy olyan eljárást hozunk létre, amely visszaadja az adatbázisban lévő ügyfelek teljes számát.
„„
CREATE PROCEDURE getTotalCustomers()
BEGIN
SELECT COUNT(*) AS total_customers FROM customers;
END
„„
Most, hogy létrehoztuk a tárolt eljárásunkat, meg tudjuk hívni a PHP-ból. Íme egy példakódrészlet, amely bemutatja, hogyan hívjuk meg a `getTotalCustomers` tárolt eljárást.
„„
<?php
// Adatbázis hitelesítő adatok
= „localhost”;
= „root”;
= „”;
= „mydatabase”;
// Adatbázis kapcsolat létrehozása
= mysqli_connect(, , , );
// A kapcsolat sikerességének ellenőrzése
if (!) {
die(„Connection failed: ” . mysqli_connect_error());
}
// Tárolt eljárás hívása
= „CALL getTotalCustomers()”;
= mysqli_query(, );
// Ellenőrizzük, hogy a lekérdezés sikeres volt-e
if (!) {
die(„Hiba a tárolt eljárás végrehajtásában: ” . mysqli_error());
}
// Eredmény lekérdezése
= mysqli_fetch_assoc();
// Eredmény kiírása
echo „Összes ügyfél: ” . [‘total_customers’];
// Adatbázis kapcsolat lezárása
mysqli_close();
?>
„`
Ebben a kódrészletben először kapcsolatot hozunk létre a MySQL adatbázisunkkal. Ezután meghívjuk a `getTotalCustomers` tárolt eljárást a `mysqli_query` függvény segítségével. Ha a lekérdezés sikeres volt, akkor a `mysqli_fetch_assoc` függvény segítségével lekérdezzük az eredményt, és kiírjuk a képernyőre.
„„
CREATE PROCEDURE getCustomerById(IN customerId INT)
BEGIN
SELECT * FROM customers WHERE id = customerId;
END
„„
A tárolt eljárás PHP-ból történő hívásához át kell adnunk a `customerId` paramétert. Íme egy példakódrészlet, amely bemutatja, hogyan hívhatjuk meg ezt a tárolt eljárást:
„„
<?php
// Adatbázis hitelesítő adatok
= „localhost”;
= „root”;
= „”;
= „mydatabase”;
// Adatbázis kapcsolat létrehozása
= mysqli_connect(, , , );
// A kapcsolat sikerességének ellenőrzése
if (!) {
die(„Connection failed: ” . mysqli_connect_error());
}
// Tárolt eljárás hívása paraméterrel
= „CALL getCustomerById(1)”;
= mysqli_query(, );
// Ellenőrizzük, hogy a lekérdezés sikeres volt-e
if (!) {
die(„Hiba a tárolt eljárás végrehajtásában: ” . mysqli_error());
}
// Eredmény lekérdezése
= mysqli_fetch_assoc();
// Eredmény kiírása
echo „Ügyfél neve: ” . [‘név’];
// Adatbázis-kapcsolat lezárása
mysqli_close();
?>
„`
Ebben a kódrészletben a `getCustomerById` tárolt eljárást hívjuk meg az `1` paraméterértékkel. Ezután lekérdezzük az eredményt, és kiírjuk az ügyfél nevét a képernyőre.
Összefoglalva, a tárolt eljárások nagymértékben leegyszerűsíthetik az adatbázis-műveleteket, mivel lehetővé teszik, hogy összetett SQL-lekérdezéseket hajtsunk végre egyetlen függvényhívással. Az ebben a cikkben bemutatott példák segítségével most már képesnek kell lennie arra, hogy tárolt eljárásokat hívjon a PHP-ból a MySQL-ben.
Egy tárolt eljárás meghívásához a MySQL-ben a CALL utasítást használhatja, amelyet a tárolt eljárás neve és az esetlegesen átadandó paraméterek követnek. Íme egy példa:
„„
CALL my_stored_procedure(‘parameter_value’);
„„
Ebben a példában a `my_stored_procedure` a tárolt eljárás neve, a `’parameter_value’` pedig egy példa az esetlegesen átadandó paraméterre.
Ha a tárolt eljárás eredményhalmazt ad vissza, akkor SELECT utasítással lekérdezheti az eredményeket. Íme egy példa:
„„
SELECT * FROM my_stored_procedure(‘parameter_value’);
„„
Ebben a példában a `my_stored_procedure` a tárolt eljárás neve, a `’parameter_value’` pedig egy példa az esetlegesen átadandó paraméterre.
Fontos megjegyezni, hogy a tárolt eljárást hívó felhasználónak rendelkeznie kell a szükséges jogosultságokkal. A jogosultságokat a GRANT utasítással adhatja meg. Íme egy példa:
„„
GRANT EXECUTE ON my_stored_procedure TO my_user;
„„
Ebben a példában a `my_stored_procedure` a tárolt eljárás neve, a `my_user` pedig annak a felhasználónak a neve, akinek engedélyre van szüksége a híváshoz. Az `EXECUTE` engedély lehetővé teszi a felhasználó számára a tárolt eljárás végrehajtását.
Egy tárolt eljárás meghívásához a PHP PDO-ban a következő lépéseket követheti:
1. Hozzon létre egy PDO objektumot, és hozzon létre kapcsolatot az adatbázishoz a megfelelő hitelesítő adatokkal.
2. Készítsen egy SQL utasítást, amely a `CALL` parancs segítségével hívja meg a tárolt eljárást. Az utasításnak tartalmaznia kell a tárolt eljárás nevét és az átadandó bemeneti vagy kimeneti paramétereket.
3. A `bindParam()` vagy `bindValue()` metódus segítségével kössük a bemeneti paramétereket az előkészített utasítás megfelelő helyőrzőihez.
4. Végezzük el az előkészített utasítást az `execute()` metódus segítségével.
5. Ha a tárolt eljárás kimeneti értékeket ad vissza, akkor azokat a megfelelő lekérdezési módszerrel, például a `fetch()`, `fetchColumn()` vagy `fetchAll()` módszerrel kérje le.
Íme egy példakódrészlet, amely bemutatja, hogyan hívhatunk meg egy tárolt eljárást a PHP PDO segítségével:
„`
<?php
// PDO objektum létrehozása és kapcsolat létrehozása az adatbázishoz
= new PDO(‘mysql:host=localhost;dbname=mydb’, ‘username’, ‘password’);
// A tárolt eljárást hívó SQL utasítás előkészítése
= ->prepare(„CALL my_stored_proc(:input_param, @output_param)”);
// A bemeneti paraméter kötése a helyőrzőhöz
= ‘some value’;
->bindParam(‘:input_param”, , PDO::PARAM_STR);
// Az előkészített utasítás végrehajtása
->execute();
// A kimeneti érték(ek) kinyerése a tárolt eljárásból
= ->query(„SELECT @output_param”)->fetch(PDO::FETCH_ASSOC);
print_r();
// Az adatbázis kapcsolat lezárása
= null;
?>
„`
Ebben a példában a `my_stored_proc` tárolt eljárás egy bemeneti paramétert fogad és egy kimeneti paramétert ad vissza. A bemeneti paramétert a `bindParam()` segítségével kötjük a helyőrzőjéhez, a kimeneti paramétert pedig a tárolt eljárás végrehajtása után egy külön `query()` hívással egy MySQL felhasználói változóból nyerjük ki. A kimeneti paraméter értékének megjelenítésére a `print_r()` függvényt használjuk. Végül az adatbázis-kapcsolat lezárása a `null` hozzárendeléssel történik.