
Czym różnią się metody łączenia do DB w PHP?
01/10/2024
Jako że jestem uczniem technikum, i mam przedawniony, nic nie uczący, oraz nie-przygotowujący do realii pracy w zawodzie egzamin INF.03, powinienem nauczyć się dokładnie PHP + MYSQL combo.
Mi pasuje.
Zacznijmy od przedstawienia możliwych metod łączenia z bazą danych:
- MySQL (przedawniona metoda nie będę jej nawet przedstawiał)
- MySQLi – proceduralne (Przeznaczona jedynie do baz, zgadłeś: MySQL!)
- PDO – obiektowe (Nie ma wyznaczonej, może być: PostgreSQL, SQLite )
Huh, co to znaczy proceduralne?
Prostymi słowami, masz przygotowane funkcje do wykonywania X działania na bazie danych. Np:

Przykładem funkcji jest tutaj mysqli_connect(); do połączenia z bazą danych
mysqli_query() do zapytania SQL
lub mysqli_close(); do zamknięcia połączenia z bazą danych
Czyli wcześniej stworzone i przygotowane funkcje które mają wykonywać X zadanie.
A obiektowe?
Operacje wykonywane są metodami, capitche?
MySQLi:

PDO:

Przy PDO możesz zauważyć że nie ma metody close(); idk czemu xdd
No spoko, a jak pobierać dane danym połączeniem?
No to najpierw MySQLi:
$stmt = mysqli_query($conn,'SELECT id,name FROM users ORDER BY id DESC");
$query = mysqli_fetch_array($stmt);
while ($row = $stmt->fetch()){ echo $row['name']."<br>";
}
PDO:
$stmt = $pdo->query("SELECT id,name FROM users ORDER BY id DESC");
$user = $stmt->fetch();
while ($row = $stmt->fetch()) {
echo $row['name']."<br>";
}
Co dokładnie zwraca fetch()?
sam fetch(default: fetch_both()) zwraca pierwszy wiersz danych tworząc tablice asocjacyjną oraz indeksowaną (naraz!)
Erm, co to znaczy asocjacyjna/indeksowana?


W skrócie, w tablicy asocjacyjnej zamiast numerycznego indeksu podajesz „klucz” odnoszący się do wartości.
Często używane parametry fetch:
MySQLi:
- mysqli_fetch_array(MYSQLI_NUM) – zwraca tablice indeksowaną numerycznie
- mysqli_fetch_array(MYSQLI_ASSOC) – zwraca tablice asocjacyjną
- mysqli_fetch_array() – zwraca pierwszy wiersz danych tworząc tablice asocjacyjną oraz indeksowaną (naraz!)
- mysqli_fetch_object() – pozwala na manipulowanie danymi jako metody obiektu
- mysqli_fetch_row() – zwraca pierwszy wiersz tabeli
PDO:
- fetch (PDO::FETCH_NUM) – zwraca tablice indeksowaną numerycznie
- fetch (PDO::FETCH_ASSOC) – zwraca tablice asocjacyjną
- fetch (PDO::FETCH_BOTH) – zwraca pierwszy wiersz danych tworząc tablice asocjacyjną oraz indeksowaną (naraz!)
- fetch (PDO::FETCH_OBJ) – pozwala na manipulowanie danymi jako metody obiektu
Przykład kodziku


Plik do skopiowania:
$mysqli = new mysqli("localhost", "root", "", "kacpero");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$sql_query = "SELECT * FROM users";
$data = $mysqli->query($sql_query);
while($row = mysqli_fetch_array($data)){
echo "$row[1]: $row[2]";
}
$mysqli->close();