post-thumbnail

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.

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?

tablica indeksowana
tablica asocjacyjna

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();