Запити до бази даних 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>";
?>
Результат виконання коду: