Skip to content

Latest commit

 

History

History
183 lines (136 loc) · 5.65 KB

File metadata and controls

183 lines (136 loc) · 5.65 KB

Выборка данных

Выбор данных из базы данных MySQL

Оператор SELECT используется для выбора данных из одной или нескольких таблиц:

SELECT column_name(s) FROM table_name;

Или мы можем использовать символ *, чтобы выбрать ВСЕ столбцы из таблицы:

SELECT * FROM table_name;

Выборка данных с помощью MySQLi

Следующий пример выбирает столбцы id, firstname и lastname из таблицы MyGuests и отображает их на странице:

<?php

$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'myDB';

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn -> connect_error) {
  die("Connection failed: {$conn -> connect_error}");
}

$sql = 'SELECT id, firstname, lastname FROM MyGuests;';
$result = $conn -> query($sql);

if ($result -> num_rows > 0) {
  // Выходные данные каждого ряда
  while($row = $result -> fetch_assoc()) {
    print("id: {$row['id']} - Name: {$row['firstname']} {$row['lastname']}<br>");
  }
} else {
  print('0 results');
}
$conn -> close();

Строки кода поясняются на примере выше:

Сначала мы создаем SQL-запрос, который выбирает столбцы id, firstname и lastname из таблицы MyGuests. Следующая строка кода выполняет запрос и помещает полученные данные в переменную $result.

Затем функция num_rows() проверяет, больше ли нулевых строк возвращено.

Если строк больше, чем ноль, функция fetch_assoc() помещает все результаты в ассоциативный массив, который мы можем просматривать в цикле. Цикл while() просматривает набор результатов и выводит данные из столбцов id, firstname и lastname. В следующем примере показано то же самое, что и в примере выше, но в процедурном виде MySQLi:

Пример в процедурном стиле MySQLi

<?php

$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'myDB';

// Создание подключения
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Проверка подключения
if (!$conn) {
  die('Connection failed: ' . mysqli_connect_error());
}

$sql = 'SELECT id, firstname, lastname FROM MyGuests;';
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // Выходные данные каждого ряда
  while($row = mysqli_fetch_assoc($result)) {
    print("id: {$row['id']} - Name: {$row['firstname']} {$row['lastname']}<br>");
  }
} else {
  print('0 results');
}

mysqli_close($conn);

Вы также можете поместить результат в таблицу HTML:

<?php

$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'myDB';

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn -> connect_error) {
  die("Connection failed: {$conn -> connect_error}");
}

$sql = 'SELECT id, firstname, lastname FROM MyGuests';
$result = $conn -> query($sql);

if ($result -> num_rows > 0) {
  print('<table><tr><th>ID</th><th>Name</th></tr>');
  // Выходные данные каждого ряда
  while($row = $result -> fetch_assoc()) {
    print("<tr><td>{$row['id']}</td><td>{$row['firstname']} {$row['lastname']}</td></tr>");
  }
  print('</table>');
} else {
  print('0 results');
}
$conn -> close();

Выбор данных с помощью PDO (+ подготовленные операторы)

В следующем примере используются подготовленные операторы. Он выбирает столбцы id, firstname и lastname из таблицы MyGuests и отображает их в таблице HTML:

<?php

print('<table style="border: solid 1px black;">');
print('<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>');

class TableRows extends RecursiveIteratorIterator {
  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return '<td style="width:150px;border:1px solid black;">' . parent::current(). '</td>';
  }

  function beginChildren() {
    print('<tr>');
  }

  function endChildren() {
    print('</tr>\n');
  }
}

$servername = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'myDB';

try {
  $conn = new PDO(
    "mysql:host={$servername};dbname={$dbname}",
    $username,
    $password
  );

  $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn -> prepare('SELECT id, firstname, lastname FROM MyGuests');
  $stmt -> execute();

  // установка результирующего массива в ассоциативный режим
  $result = $stmt -> setFetchMode(PDO::FETCH_ASSOC);

  foreach(new TableRows(new RecursiveArrayIterator($stmt -> fetchAll())) as $k => $v) {
    print($v);
  }
} catch(PDOException $e) {
  print("Error: {$e -> getMessage()}");
}

$conn = null;

print('</table>');