Ha valaha is dolgoztál régebbi PHP kódbázisokkal, amelyek MySQL adatbázisokkal kommunikálnak, nagy valószínűséggel találkoztál a mysql_select_db()
függvénnyel. Ez a függvény egykor alapvető része volt a PHP és MySQL közötti interakciónak, de az idők változnak, és vele együtt a legjobb gyakorlatok is. Ebben a cikkben alaposan megvizsgáljuk a mysql_select_db()
funkciót, megértjük, hogyan működik, mire használták, és ami a legfontosabb, miért kerüld el a használatát a modern fejlesztésben.
Mi is az a mysql_select_db()?
A mysql_select_db()
egy PHP függvény, amely a mysql
kiterjesztés része volt. Ennek a függvénynek az egyetlen feladata az volt, hogy kiválasszon egy adott MySQL adatbázist, amelyet a továbbiakban használni szeretnénk az adatbázis lekérdezéseihez. Egyszerűen fogalmazva, beállította a „munkahelyet” a MySQL szerveren belül.
Nézzünk egy rövid példát a használatára:
<?php
$kapcsolat = mysql_connect("localhost", "felhasználónév", "jelszó");
if (!$kapcsolat) {
die("Nem sikerült csatlakozni: " . mysql_error());
}
$db_nev = "az_adatbazisom";
$siker = mysql_select_db($db_nev, $kapcsolat);
if (!$siker) {
die("Nem sikerült kiválasztani az adatbázist: " . mysql_error());
}
// Innentől kezdve az "az_adatbazisom" adatbázison dolgozunk
$eredmeny = mysql_query("SELECT * FROM tábla");
// ...
mysql_close($kapcsolat);
?>
Ebben a példában először létrehozunk egy kapcsolatot a MySQL szerverrel a mysql_connect()
segítségével. Ezután a mysql_select_db()
függvény segítségével kiválasztjuk az az_adatbazisom
nevű adatbázist. Ha a kiválasztás sikeres, elkezdhetünk lekérdezéseket futtatni ezen az adatbázison belül.
A probléma a mysql kiterjesztéssel és a mysql_select_db()-vel
Bár a mysql_select_db()
egykor hasznos volt, most már elavultnak számít, és nyomós okokból nem ajánlott a használata:
- Elavult: A
mysql
kiterjesztés, amelynek amysql_select_db()
része volt, 2012-ben elavulttá vált a PHP 5.5.0 verziójában, és a PHP 7.0-tól teljesen eltávolították. Ez azt jelenti, hogy a modern PHP verziókban egyszerűen nem fog működni a kódod. - Biztonsági kockázatok: A
mysql
kiterjesztés híresen nem volt biztonságos. Nem nyújtott megfelelő védelmet az SQL injection támadások ellen, ami komoly biztonsági rést jelentett a webalkalmazások számára. - Hiányzó funkcionalitás: A
mysql
kiterjesztés hiányzott néhány modern adatbázis-kezelési funkció, amelyek a MySQLi és PDO kiterjesztésekben megtalálhatók.
Alternatívák: MySQLi és PDO
Ahelyett, hogy a mysql_select_db()
-re támaszkodnánk, a modern PHP fejlesztés két sokkal jobb alternatívát kínál: MySQLi és PDO.
MySQLi (MySQL Improved Extension)
A MySQLi egy továbbfejlesztett kiterjesztés, amely a mysql
kiterjesztés helyébe lépett. Javítja a biztonságot, a funkcionalitást és a teljesítményt. A MySQLi-vel a MySQL adatbázis kiválasztása a kapcsolat létrehozásakor történik, vagy egy külön mysqli_select_db()
függvénnyel, bár ezt a gyakorlatot is inkább a kapcsolat létrehozásakor javasolt elvégezni.
Példa a MySQLi használatára:
<?php
$kapcsolat = mysqli_connect("localhost", "felhasználónév", "jelszó", "az_adatbazisom");
if (!$kapcsolat) {
die("Nem sikerült csatlakozni: " . mysqli_connect_error());
}
// Innentől kezdve az "az_adatbazisom" adatbázison dolgozunk
$eredmeny = mysqli_query($kapcsolat, "SELECT * FROM tábla");
// ...
mysqli_close($kapcsolat);
?>
Ebben a példában láthatjuk, hogy az adatbázis nevét a mysqli_connect()
függvénynek adjuk át negyedik paraméterként. Ez sokkal elegánsabb és biztonságosabb megoldás.
PDO (PHP Data Objects)
A PDO egy általánosabb adatbázis-absztrakciós réteg, amely lehetővé teszi, hogy ugyanazt a kódot használjuk különböző adatbázis rendszerekkel (MySQL, PostgreSQL, SQLite stb.). A PDO az adatbázis kiválasztását a DSN (Data Source Name) részeként kezeli a kapcsolat létrehozásakor.
Példa a PDO használatára:
<?php
$host = "localhost";
$db_nev = "az_adatbazisom";
$felhasználónév = "felhasználónév";
$jelszó = "jelszó";
try {
$kapcsolat = new PDO("mysql:host=$host;dbname=$db_nev", $felhasználónév, $jelszó);
$kapcsolat->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Innentől kezdve az "az_adatbazisom" adatbázison dolgozunk
$stmt = $kapcsolat->query("SELECT * FROM tábla");
// ...
} catch(PDOException $e) {
echo "Kapcsolódási hiba: " . $e->getMessage();
}
$kapcsolat = null;
?>
Itt a DSN-ben ("mysql:host=$host;dbname=$db_nev"
) adjuk meg az adatbázis nevét. A PDO különösen ajánlott a modern webalkalmazások fejlesztéséhez, mivel biztonságosabb és rugalmasabb.
Összefoglalás
A mysql_select_db()
egy elavult és nem biztonságos funkció, amelyet kerülni kell a modern PHP fejlesztés során. Helyette a MySQLi vagy a PDO kiterjesztéseket ajánljuk, amelyek biztonságosabbak, hatékonyabbak és megfelelnek a mai követelményeknek. Ne feledd: a biztonság és a naprakészség kulcsfontosságú a sikeres webalkalmazás fejlesztéshez.