Получение данных в MySQLi

Последнее обновление: 09.06.2021

Для получения данных в MySQL применяется команда SELECT. Например, получение всех данных из таблицы Users:

SELECT * FROM Users

Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)

Объектно-ориентированный стиль

При выполнении команды SELECT метод query() объекта mysqli возвращает набор полученных строк, который мы можем перебрать с помощью цикла. Например, перебор с помощью цикла foreach:

$sql = "SELECT * FROM Users";
if($result = $conn->query($sql)){
    foreach($result as $row){
		
		$userid = $row["id"];
		$username = $row["name"];
		$userage = $row["age"];
	}
}

Здесь $result представляет набор строк. Каждый его элемент, который передается в переменную $row, хранит данные отдельной строки в виде ассоциативного массива, где ключи элементов - названия столбцов.

Вместо цикла foreach также можно использовать другие виды циклов. Например, применение цикла while:

$sql = "SELECT * FROM Users";
if($result = $conn->query($sql)){
    while($row = $result->fetch_array()){
		
		$userid = $row["id"];
		$username = $row["name"];
		$userage = $row["age"];
	}
}

В данном случае метод $result->fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false, и произойдет выход из цикда. Полученное значени $row опять же представляет строку в виде ассоциативного массива.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью метода free():

$result->free();

Теперь посмотрим на примере. Определим скрипт index.php, которая будет выводить значения из таблицы Users:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<h2>Список пользователей</h2>
<?php
$conn = new mysqli("localhost", "root", "mypassword", "testdb2");
if($conn->connect_error){
	die("Ошибка: " . $conn->connect_error);
}
$sql = "SELECT * FROM Users";
if($result = $conn->query($sql)){
	$rowsCount = $result->num_rows; // количество полученных строк
	echo "<p>Получено объектов: $rowsCount</p>";
    echo "<table><tr><th>Id</th><th>Имя</th><th>Возраст</th></tr>";
	foreach($result as $row){
		echo "<tr>";
			echo "<td>" . $row["id"] . "</td>";
			echo "<td>" . $row["name"] . "</td>";
			echo "<td>" . $row["age"] . "</td>";
		echo "</tr>";
	}
	echo "</table>";
	$result->free();
} else{
    echo "Ошибка: " . $conn->error;
}
$conn->close();
?>
</body>
</html>

Таким образом, при обращении к скрипту index.php браузер отобразит список данных, полученных из БД:

Получение данных из MySQL в PHP с помощью MySQLi

Дополнительно стоит отметить, что с помощью свойства $result->num_rows мы можем получить количество строк, извлеченных из БД.

Процедурный стиль

При процедурном стиле функция mysqli_query() при успешном выполнении команды SELECT возвращает набор строк, который можно перебрать с помощью цикла:

$sql = "SELECT * FROM Users";
if($result = mysqli_query($conn, $sql)){
    foreach($result as $row){
		
		$userid = $row["id"];
		$username = $row["name"];
		$userage = $row["age"];
	}
}

Как и при объектно-ориентированном подходе, полученные строки представляют ассоциативные массивы, где ключи элементов - названия столбцов.

Пример перебоа с помощью цикла while:

$sql = "SELECT * FROM Users";
if($result = mysqli_query($conn, $sql)){
    while($row = mysqli_fetch_array($result)){
		
		$userid = $row["id"];
		$username = $row["name"];
		$userage = $row["age"];
	}
}

Функция mysqli_fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false, и произойдет выход из цикла.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью функции mysqli_free_result(), в которую передается полученный набор строк:

mysqli_free_result($result);

Полный пример:

<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<h2>Список пользователей</h2>
<?php
$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");
if (!$conn) {
  die("Ошибка: " . mysqli_connect_error());
}
$sql = "SELECT * FROM Users";
if($result = mysqli_query($conn, $sql)){
	
	$rowsCount = mysqli_num_rows($result); // количество полученных строк
	echo "<p>Получено объектов: $rowsCount</p>";
    echo "<table><tr><th>Id</th><th>Имя</th><th>Возраст</th></tr>";
	foreach($result as $row){
		echo "<tr>";
			echo "<td>" . $row["id"] . "</td>";
			echo "<td>" . $row["name"] . "</td>";
			echo "<td>" . $row["age"] . "</td>";
		echo "</tr>";
	}
	echo "</table>";
	mysqli_free_result($result);
} else{
    echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
</body>
</html>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850