Получение данных MySQLi
Для получения данных в 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>hmarketing.ru</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
браузер отобразит список данных, полученных из БД:
Дополнительно стоит отметить, что с помощью свойства $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>hmarketing.ru</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>