Существует несколько способов выполнения SELECT-запроса с помощью PDO, которые различаются в основном наличием параметров, типом параметров и типом результата. Я покажу примеры для каждого случая, чтобы вы могли выбрать тот, который подходит вам больше всего.
Просто убедитесь, что у вас правильно настроена переменная соединения PDO, которая должна выполнять SQL-запросы с помощью PDO и сообщать вам о возможных ошибках.
Если в запросе не будут использоваться переменные, мы можем использовать обычный метод query() вместо prepare и execute.
// получение всех пользователей
$stmt = $pdo->query("SELECT * FROM users");
Это даст нам объект $stmt
, который может быть использован для получения актуальных строк.
Получение одной строки
Если запрос должен вернуть только одну строку, то можно просто вызвать метод fetch()
переменной $stmt
:
// получение последнего зарегистрированного пользователя
$stmt = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 1");
$user = $stmt->fetch();
Обратите внимание, что в PHP вы можете "цепочкой" вызывать методы, вызывая метод уже возвращенного объекта, например:
$user = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 1")->fetch();
Выбор нескольких строк
Существует два способа получения нескольких строк, возвращенных в результате запроса. Самый традиционный способ - использовать метод fetch()
в цикле while
:
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch()) {
echo $row['name']."<br />\n";
}
Этот метод может быть рекомендован, если строки должны обрабатываться по одной. Например, если такая обработка является единственным действием, которое необходимо выполнить, или если данные должны быть как-то предварительно обработаны перед использованием.
Но наиболее предпочтительным способом получения нескольких строк, которые должны быть показаны на странице, является вызов замечательного вспомогательного метода fetchAll()
. Он поместит все строки, возвращенные после запроса, в массив PHP, который позже можно будет использовать для вывода данных с помощью шаблона (что считается эффективнее, чем вывод данных прямо во время процесса fetch). Таким образом, код будет выглядеть следующим образом:
$data = $pdo->query("SELECT * FROM users")->fetchAll();
// где-то позднее:
foreach ($data as $row) {
echo $row['name']."<br />\n";
}