Запити до бази даних MySQL за допомогою PHP
- Підключення до MySQL і вибір бази даних, яка буде використовуватися.
- Створення рядка запиту.
- Виконання запиту.
- Витяг результатів і вивід їх на веб-сторінку.
- Повторення кроків з 2-го по 4-й доти, поки не будуть витягнуті всі необ- ходимо дані.
- Відключення від MySQL.
Процес використання MySQL за допомогою PHP полягає в наступному.
Приклад 10.1. Файл login.php
<?php // login.php $hm = 'localhost'; $db = 'publications'; $un = 'имя_пользователя'; $pw = 'пароль'; ?>
Приклад 10.2. Підключення до сервера MySQL за допомогою mysqli
<?php require_once 'login.php'; $conn = new mysqli($hn, $un, $pw, $db); if ($conn->connect_error) die($conn->connect_error); ?>
Створення та виконання запиту
Відправлення запиту до MySQL з PHP зводиться до простого виклику методу query, що належить об'єкту підключення.
Приклад 10.3 Відправка запиту
<?php $query = "SELECT * FROM classics"; $result = $conn->query($query); if (!$result) die ($conn-> error); ?>
- $query присвоюється значення, що містить код майбутнього запиту, а потім вона передається методу query об'єкта $conn, який повертає результат, що вставляється в об'єкт $result.
Видобування результату
Приклад 10.4 Поелементне видобуваання результатів
<?php
// query.php
require_once 'login.php';
$conn = new mysqli ($hn, $un, $pw, $db );
if ($conn->connect_error) die($conn->connect_error);
$query = "SELECT * FROM classics";
$result = $conn->query($query);
if (!$result) die ($conn->error);
$rows = $result->num_rows;
for ($j = 0 ; $j < $rows ; ++$j) {
$result->data_seek($j);
echo 'Author: ' . result->fetch_assoc()['author'] . '<br>';
$result->data_seek($j);
echo 'Title: ' . result->fetch_assoc()['title'] . '<br>';
$result->data_seek($j);
echo 'Category: ' . result->fetch_assoc()['category'] . '<br>';
$result->data_seek($j);
echo 'Year: ' . result->fetch_assoc()['year'] . '<br>';
$result->data_seek($j);
echo 'ISBN: ' . result->fetch_assoc()['isbn'] . '<br><br>';
}
$result->close();
$conn->close();
?>
Перед витяганням кожного елемента даних при кожному проходженні циклу для пошуку потрібного рядка викликається метод data_seek, що належить об'єкту $result. Потім для отримання значення, збереженого в кожному полі, викликається метод fetch_assoc,
mysqli_result::data_seek -- mysqli_data_seek - переміщує покажчик результату на обраний рядок
а для виведення результату на екран використовуються інструкції echo.
Приклад 10.5 Видобування рядка
Для порядкового вилучення даних цикл for з прикладу 10.4 слід замінити циклом, з прикладу 10.5
<?php require_once 'login.php'; $conn = new mysqli($hn, $un, $pw, $db); if ($conn->connect_error) die($conn->connect_error); $query = "SELECT * FROM classics"; $result = $conn->query($query); if (!$result) die($conn->error); $rows = $result->num_rows; for ($j = 0 ; $j < $rows ; ++$j) { $result->data_seek($j); $row = $result->fetch_array(MYSQLI_ASSOC); echo 'Author: ' . $row['author'] . '<br>'; echo 'Title: ' . $row['title'] . '<br>'; echo 'Category: ' . $row['category'] . '<br>'; echo 'Year: ' . $row['year'] . '<br>'; echo 'ISBN: ' . $row['isbn'] . '<br><br>'; } $result->close(); $conn->close(); ?>
mysqli_result::fetch_array -- mysqli_fetch_array - Вибирає один рядок з результуючого набору і поміщає його в асоціативний масив MYSQLI_ASSOC, звичайний масив MYSQLI_NUM або в обидва MYSQLI_BOTH
Повертає масив відповідний вибраному рядку або NULL, якщо в результуючій таблиці, представленої параметром result, більше немає доступних рядків.
При використанні константи MYSQLI_ASSOC функція буде вести себе ідентично mysqli_fetch_assoc(), а при MYSQLI_NUM ідентично функції mysqli_fetch_row(). При завданні MYSQLI_BOTH функція створить один масив, що включає атрибути обох варіантів.
Практична робота з MySQL
Приклад 10.7 Створення таблиці cats
<?php require_once 'scripts/login.php'; $conn = new mysqli($hn, $un, $pw, $db); if ($conn->connect_error) die($conn->connect_error); $query = "CREATE TABLE cats ( id SMALLINT NOT NULL AUTO_INCREMENT, family VARCHAR(32) NOT NULL, name VARCHAR(32) NOT NULL, age TINYINT NOT NULL, PRIMARY KEY (id) )"; $result = $conn->query($query); if (!$result) die ("Збій при доступі до бази даних: " . $conn->error); ?>
Приклад 10.8 Опис таблиці cats
<?php require_once 'scripts/login.php'; $conn = new mysqli($hn, $un, $pw, $db); if ($conn->connect_error) die ($conn->connect_error); $query = "DESCRIBE cats"; $result = $conn->query($query); if (!$result) die ("Збій при доступі до бази даних: " . $conn->error); $rows = $result->num_rows; echo "<table> <tr> <th>Column</th> <th>Type</th> <th>Null</th> <th>Key</th> </tr>"; for ($j = 0 ; $j < $rows ; ++$j) { $result->data_seek($j); $row = $result->fetch_array(MYSQLI_NUM); echo "<tr>"; for ($k = 0 ; $k < 4 ; ++$k) echo "<td>$row[$k]</td>"; } echo "</table>"; ?>
Результат виконання коду: