PHP MySQLFunkcje i: mysqli_query i mysqli_connect

⚡ Inteligentne podsumowanie

MySQL, PHP i inne metody dostępu do baz danych umożliwiają skryptowi PHP łączenie się z bazą danych, uruchamianie zapytań i odczytywanie wyników. Ten przewodnik obejmuje podstawowe funkcje MySQL, pełne przykłady CRUD, przygotowane instrukcje bezpieczeństwa oraz alternatywne metody dostępu PDO i ODBC.

  • 🔌 Złączony: mysqli_connect otwiera link do MySQL serwer, a mysqli_select_db wybiera bazę danych, z którą będzie pracować.
  • 🗃️ Uruchamianie zapytań: mysqli_query wykonuje polecenia INSERT, SELECT, UPDATE i DELETE na wybranej bazie danych.
  • 📄 Wyniki czytania: mysqli_num_rows zlicza zwrócone wiersze, a mysqli_fetch_array odczytuje każdy wiersz do tablicy w celu uzyskania danych wyjściowych.
  • 🔄 OKRUTNY Operacje: Łącznie funkcje te tworzą, odczytują, aktualizują i usuwają rekordy, czyli stanowią cztery podstawowe operacje bazy danych.
  • 🛡️ Przygotowane oświadczenia: Powiązanie wartości z przygotowanymi instrukcjami zapobiega atakom typu SQL injection, w przeciwieństwie do tworzenia zapytań poprzez łączenie danych wejściowych użytkownika.
  • 🧩 PDO i ODBC: PDO oferuje jeden interfejs dla wielu silników baz danych, podczas gdy ODBC łączy się ze źródłami takimi jak Microsoft Dostęp.
  • 🤖 Asystent AI: Narzędzia AI potrafią konwertować starszy kod MySQL do PDO przy użyciu przygotowanych poleceń i debugowania błędów połączenia.

PHP MySQL Dostęp do bazy danych

PHP posiada bogatą kolekcję wbudowanych funkcji do manipulowania MySQL bazy danych.

Funkcja PHP mysqli_connect

Funkcja PHP mysqli_connect służy do łączenia się z MySQL Serwer bazy danych.

Ma następującą składnię.

<?php
$db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password);
?>

TUTAJ,

  • „$db_handle” to zmienna zasobu połączenia z bazą danych.
  • „mysqli_connect(…)” to funkcja połączenia z bazą danych PHP
  • „$db_server_name” to nazwa lub adres IP serwera hostującego MySQL serwer.
  • „$db_user_name” to prawidłowa nazwa użytkownika w MySQL serwer.
  • „$db_password” to prawidłowe hasło powiązane z nazwą użytkownika w MySQL serwer.

Funkcja PHP mysqli_select_db

Funkcja mysqli_select_db służy do wybierania bazy danych.

Ma następującą składnię.

<?php
mysqli_select_db($db_handle, $database_name);
?>

TUTAJ,

  • „mysqli_select_db(…)” to funkcja wyboru bazy danych, która zwraca wartość true lub false
  • „$db_handle” to łącze połączenia z serwerem
  • „$database_name” to nazwa bazy danych

Funkcja PHP mysqli_query

Funkcja mysqli_query służy do wykonywania SQL zapytania.

Funkcja ta może być używana do wykonywania następujących typów zapytań:

  • wstawka
  • Wybierz
  • Aktualizacja
  • Usunięcia

Ma następującą składnię.

<?php
mysqli_query($db_handle, $query);
?>

TUTAJ,

  • „mysqli_query(…)” to funkcja wykonująca zapytania SQL.
  • „$db_handle” to łącze połączenia z serwerem
  • „$query” to zapytanie SQL, które ma zostać wykonane

Funkcja PHP mysqli_num_rows

Funkcja mysqli_num_rows służy do uzyskania liczby wierszy zwróconych przez zapytanie SELECT.

Ma następującą składnię.

<?php
mysqli_num_rows($result);
?>

TUTAJ,

  • „mysqli_num_rows(…)” to funkcja zliczająca wiersze
  • „$result” to zestaw wyników mysqli_query

Funkcja PHP mysqli_fetch_array

Funkcja mysqli_fetch_array służy do pobierania tablic wierszy z zestawu wyników zapytania.

Ma następującą składnię.

<?php
mysqli_fetch_array($result);
?>

TUTAJ,

  • „mysqli_fetch_array(…)” to funkcja służąca do pobierania tablic wierszy
  • “$result” to wynik zwrócony przez funkcję mysqli_query.

Funkcja PHP mysqli_close

Funkcja mysqli_close służy do zamykania otwartego połączenia z bazą danych.

Ma następującą składnię.

<?php
mysqli_close($db_handle);
?>

TUTAJ,

  • „mysqli_close(…)” to funkcja PHP, która zamyka połączenie
  • „$db_handle” to zasób połączenia z serwerem

PHP MySQL Przykłady CRUD

Przyjrzyjmy się praktycznym przykładom wykorzystującym te funkcje. Ten samouczek zakłada znajomość MySQL i SQL; jeśli te terminy są dla Ciebie nieznane, zapoznaj się z naszą MySQL i tutoriale SQL.

Utworzymy prostą bazę danych o nazwie my_personal_contacts z jedną tabelą. Połącz się z MySQL za pomocą ulubionego narzędzia dostępu, takiego jak MySQL W Workbench lub phpMyAdmin utwórz bazę danych o nazwie my_personal_contacts, a następnie wykonaj poniższy skrypt, aby utworzyć tabelę i wstawić do niej dane zastępcze.

CREATE TABLE IF NOT EXISTS `my_contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`full_names` varchar(255) NOT NULL,
`gender` varchar(6) NOT NULL,
`contact_no` varchar(75) NOT NULL,
`email` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`country` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES
(1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'),
(2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'),
(3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'),
(4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');

Odczytywanie rekordów z bazy danych

Teraz utworzymy program, który będzie drukował rekordy z bazy danych.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "SELECT * FROM my_contacts"; // SQL select query
$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement

if (!$result)
    die("Database access failed: " . mysqli_error($dbh));

$rows = mysqli_num_rows($result); // get number of rows returned

if ($rows) {
    while ($row = mysqli_fetch_array($result)) {
        echo 'ID: ' . $row['id'] . '<br>';
        echo 'Full Names: ' . $row['full_names'] . '<br>';
        echo 'Gender: ' . $row['gender'] . '<br>';
        echo 'Contact No: ' . $row['contact_no'] . '<br>';
        echo 'Email: ' . $row['email'] . '<br>';
        echo 'City: ' . $row['city'] . '<br>';
        echo 'Country: ' . $row['country'] . '<br><br>';
    }
}
mysqli_close($dbh); // close the database connection
?>

Wykonanie powyższego kodu zwróci wyniki pokazane na poniższym diagramie.

PHP: MySQL Funkcje

Wstawianie nowych rekordów

Przyjrzyjmy się teraz przykładowi dodania nowego rekordu do naszej tabeli. Poniższy kod pokazuje implementację.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)";
$sql_stmt .= " VALUES(7,8,9,10,11,12)";

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Adding record failed: " . mysqli_error($dbh));

echo "Poseidon has been successfully added to your contacts list";
mysqli_close($dbh); // close the database connection
?>

Wykonanie powyższego kodu zwraca komunikat „Posejdon został pomyślnie dodany do listy kontaktów”. Wróć do przykładu zapytania SELECT i ponownie pobierz kontakty, aby sprawdzić, czy Posejdon został dodany do listy.

Aktualizowanie rekordów

Przyjrzyjmy się teraz przykładowi aktualizacji rekordu w bazie danych. Załóżmy, że Posejdon zmienił swój numer kontaktowy i adres e-mail.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9";
$sql_stmt .= " WHERE `id` = 5"; // SQL update query

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Updating record failed: " . mysqli_error($dbh));

echo "ID number 5 has been successfully updated";
mysqli_close($dbh); // close the database connection
?>

Usuwanie rekordów

Przyjrzyjmy się teraz przykładowi, który usuwa rekordy z bazy danych. Załóżmy, że Venus ma wobec nas nakaz sądowy i musimy usunąć jej dane kontaktowe z naszej bazy. baza danych.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server
if (!$dbh)
    die("Unable to connect to MySQL: " . mysqli_connect_error());

if (!mysqli_select_db($dbh, 'my_personal_contacts'))
    die("Unable to select database: " . mysqli_error($dbh));

$id = 4; // Venus's ID in the database
$sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query

$result = mysqli_query($dbh, $sql_stmt); // execute SQL statement
if (!$result)
    die("Deleting record failed: " . mysqli_error($dbh));

echo "ID number $id has been successfully deleted";
mysqli_close($dbh); // close the database connection
?>

Zapobieganie wstrzyknięciom kodu SQL za pomocą przygotowanych instrukcji

Powyższe przykłady CRUD budują zapytania poprzez łączenie ciągów znaków. Gdy jakakolwiek część zapytania pochodzi z danych wprowadzonych przez użytkownika, otwiera to drogę do ataku typu SQL injection. Przygotowane instrukcje rozwiązują ten problem, wysyłając zapytanie i dane oddzielnie, dzięki czemu dane wejściowe nigdy nie mogą zmienić struktury zapytania.

<?php
$dbh = mysqli_connect('localhost', 'root', 'melody');
$stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
$name = 'Poseidon';
$email = 'poseidon@sea.oc';
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($dbh);
?>

W tym przypadku znaki zapytania są symbolami zastępczymi, a bind_param bezpiecznie wiąże wartości imienia i adresu e-mail. Baza danych traktuje je wyłącznie jako dane, dlatego przygotowane instrukcje, dostępne zarówno w MySQL, jak i PDO, są zalecanym sposobem uruchamiania dowolnego zapytania wykorzystującego dane wprowadzone przez użytkownika.

Obiekt dostępu do danych PHP (PDO)

PDO to klasa umożliwiająca manipulowanie różnymi silnikami baz danych, takimi jak: MySQL, PostgreSQLi MS SQL Server przy użyciu tego samego interfejsu.

Poniższy kod przedstawia sposób dostępu do bazy danych z wykorzystaniem obiektu PDO.

Uwaga: poniższy kod zakłada znajomość języka SQL, tablic, obsługi wyjątków i pętli foreach.

<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody');

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');

$sql_stmt = "SELECT * FROM `my_contacts`";
$result = $pdo->query($sql_stmt);
$result->setFetchMode(PDO::FETCH_ASSOC);
$data = array();
foreach ($result as $row) {
$data[] = $row;
}
print_r($data);
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>

TUTAJ,

  • „try{…}catch{…}” to blok obsługi wyjątków
  • “$pdo = new PDO(“mysql…” tworzy wystąpienie obiektu PDO i przekazuje sterownik bazy danych, nazwę serwera i bazy danych, identyfikator użytkownika i hasło.
  • „$pdo->setAttribute…” ustawia tryb błędu PDO na zgłaszanie wyjątków
  • „$pdo->exec('SET NAMES…” ustawia format kodowania

Dostęp do danych ODBC PHP

ODBC to akronim od Open Database Connectivity (Otwarta Łączność Baz Danych). Jego podstawowa składnia jest następująca.

<?php
$conn = odbc_connect($dsn, $user_name, $password);
?>

TUTAJ,

  • „odbc_connect” to wbudowana funkcja PHP
  • „$dsn” to nazwa źródła danych ODBC.
  • „$user_name” jest opcjonalne i służy do podania nazwy użytkownika ODBC
  • „$password” jest opcjonalne i służy do podania hasła ODBC

Poniższy przykład zakłada, że ​​używasz Windows i utworzyłem łącze ODBC do northwind Microsoft Dostęp do bazy danych o nazwie northwind.

<?php
$dbh = odbc_connect('northwind', '', '');
if (!$dbh) {
exit("Connection Failed: " . $dbh);
}
$sql_stmt = "SELECT * FROM customers";
$result = odbc_exec($dbh, $sql_stmt);
if (!$result) {
exit("Error accessing records");
}
while (odbc_fetch_row($result)) {
$company_name = odbc_result($result, "CompanyName");
$contact_name = odbc_result($result, "ContactName");
echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>";
}
odbc_close($dbh);
?>

FAQ

mysqli działa tylko z MySQL i oferuje zarówno style proceduralne, jak i obiektowe. PDO współpracuje z wieloma bazami danych za pośrednictwem jednego interfejsu i obsługuje nazwane symbole zastępcze. Oba obsługują przygotowane instrukcje; PDO jest bardziej przenośne między silnikami.

Nie. Oryginalne rozszerzenie mysql_* zostało usunięte w PHP 7. Zamiast tego użyj mysqli lub PDO. Oba są aktywnie utrzymywane, obsługują przygotowane polecenia i chronią przed ryzykiem wstrzyknięcia starego rozszerzenia.

Wykryj błąd i wyświetl użytkownikowi ogólny komunikat, logując szczegóły prywatnie. Nie wyświetlaj użytkownikom wyników mysqli_error, ponieważ może to ujawnić nazwy tabel i strukturę, które mogą być przydatne dla atakującego.

Tak. Wklej skrypt MySQL, a AI przepisze go za pomocą PDO, zastąpi scalone zapytania parametrami powiązanymi i doda obsługę błędów try-catch. RevObejrzyj symbole zastępcze i przetestuj każde zapytanie później.

Tak. Udostępnij błąd i kod połączenia, a AI wykryje nieprawidłowe dane logowania, wadliwy host lub port, brakującą bazę danych lub wyłączony sterownik i zasugeruje poprawione ustawienia do wypróbowania.

Podsumuj ten post następująco: