Получение данных PDO
На уровне кода 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>
: