Существует несколько способов выполнения SELECT-запроса с помощью PDO, которые различаются в основном наличием параметров, типом параметров и типом результата. Я покажу примеры для каждого случая, чтобы вы могли выбрать тот, который подходит вам больше всего.

Просто убедитесь, что у вас правильно настроена переменная соединения PDO, которая должна выполнять SQL-запросы с помощью PDO и сообщать вам о возможных ошибках.

Запрос SELECT без параметров

Если в запросе не будут использоваться переменные, мы можем использовать обычный метод 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";
}

Запрос SELECT с параметрами

Но чаще всего нам приходится использовать переменную или две в запросе, и в таком случае мы должны использовать подготовленный запрос (также называемый запросом с параметрами), сначала подготавливая запрос с параметрами (или плейсхолдерами), а затем выполняя его, передавая переменные отдельно.

В PDO мы можем использовать как позиционные, так и именованные плейсхолдеры. Для простых запросов лично я предпочитаю позиционные заполнители, мне они кажутся менее громоздкими, но это дело вкуса.

Запрос SELECT с позиционными заполнителями

// выбрать конкретного пользователя по id
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$id]); 
$user = $stmt->fetch();

Запрос SELECT с именованными заполнителями

// выбрать конкретного пользователя по id
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=:id");
$stmt->execute(['id' => $id]); 
$user = $stmt->fetch();

Выбор нескольких строк

Получение нескольких строк с помощью подготовленного запроса будет идентично показанному выше запросу:

$stmt = $pdo->prepare("SELECT * FROM users LIMIT ?, ?");
$stmt->execute([$limit, $offset]); 
while ($row = $stmt->fetch()) {
    echo $row['name']."<br />\n";
}

Или:

$stmt = $pdo->prepare("SELECT * FROM users LIMIT :limit, :offset");
$stmt->execute(['limit' => $limit, 'offset' => $offset]); 
$data = $stmt->fetchAll();
// где-то позднее:
foreach ($data as $row) {
    echo $row['name']."<br />\n";
}

Статьи # # #