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

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

На уровне кода 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>:

SELECT data from MySQL in PHP PDO
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850