Home

Запити до бази даних MySQL за допомогою PHP

    Процес використання MySQL за допомогою PHP полягає в наступному.

  1. Підключення до MySQL і вибір бази даних, яка буде використовуватися.
  2. Створення рядка запиту.
  3. Виконання запиту.
  4. Витяг результатів і вивід їх на веб-сторінку.
  5. Повторення кроків з 2-го по 4-й доти, поки не будуть витягнуті всі необ- ходимо дані.
  6. Відключення від MySQL.
MySQLi

Приклад 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>";
      ?>
    

Результат виконання коду: