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