На уровне кода SQL получение данных осуществляется с помощью команды SELECT. Например, получение всех данных из таблицы Users:
SELECT * FROM Users
В библиотеке pdo для получения данных у объекта PDO вызывается метод query(), в который передается команда SQL. Метод query() возвращает объект PDOStatement, который представляет набор всех полученных из базы данных строк.
$sql = "SELECT * FROM Users"; $result = $conn->query($sql);
Получив объект PDOStatement, мы можем извлечь данные. В частности, его метод fetch() при первом обращении первую строку (если в наборе есть строки):
$row = $result->fetch();
При последующих обращениях метод fetch()
возвращает следующие строки, пока в наборе не останется строк.
Если строк в наборе больше нет, то метод возвращает false. Поэтому для получения всех строк удобно использовать циклы. Например, цикл while
:
while($row = $result->fetch()){ // обработка строк }
Таким образом, при каждой итерации цикл while будет получать новую строку из набора в переменную $row
, пока метод $result->fetch()
не возвратит false
- после чего произойдет выход из цикла.
Строка возвращается в виде ассоциативного массива, где отдельные значения - это столбцы строки, а ключи этих значений - названия столбцов таблицы. Например, получение значения столбца "name" в переменную:
while($row = $result->fetch()){ $username = $row["name"]; // операции с $username }
Вместо цикла while можно использовать цикл for/foreach. Например:
foreach($result as $row){ $username = $row["name"]; // операции с $username }
Здесь явным образом не вызывается метод $result->fetch()
. Формально мы просто перебираем переменную $result
как обычный массив, также помещая
каждую строку в переменную $row
.
Теперь все объединим и получим данные из таблицы Users из прошлых тем, которая имеет следующее определение:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Для этого определим следующий простенький скрипт:
<?php try { $conn = new PDO("mysql:host=localhost;dbname=testdb1", "root", "mypassword"); $sql = "SELECT * FROM Users"; $result = $conn->query($sql); echo "<table><tr><th>Id</th><th>Name</th><th>Age</th></tr>"; while($row = $result->fetch()){ echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "</tr>"; } echo "</table>"; } catch (PDOException $e) { echo "Database error: " . $e->getMessage(); } ?>
В данном случае полученные данные будут выводиться в таблицу, создаваемую элементом <table>
: