PHP SQL Server: Выбор данных

В этом уроке вы узнаете, как выбрать одну или несколько строк из таблицы SQL Server с помощью PHP.

Этот урок начинается с того места, где закончился урок по вставке нескольких строк в таблицу из PHP.

Мы покажем вам, как выбрать одну строку и несколько строк из таблицы «Авторы» в базе данных BookStore.

Выбор одной строки

Шаг 1. Добавьте метод findById в класс AuthorDB:

function findById(int $authorId)
{
    $sql = 'SELECT * FROM Authors WHERE AuthorID = :id';
    $stmt = $this->conn->prepare($sql);
    $stmt->execute(['id' => $authorId]);
    $row = $stmt->fetch(\PDO::FETCH_ASSOC);
    return $row ? new Author($row['FirstName'], $row['LastName'], $row['BirthDate'], $row['AuthorID']) : null;
}

Сначала определите метод findById, который принимает $authorId в качестве параметра:

function findById(int $authorId)

Во-вторых, создайте оператор SELECT, который извлекает все столбцы из таблицы Authors , где AuthorID соответствует указанному параметру:

$sql = 'SELECT * FROM Authors WHERE AuthorID = :id';

В запросе :id — это именованный заполнитель. Использование параметризованного запроса с именованным заполнителем упрощает чтение кода и помогает предотвратить SQL-инъекцию.

В-третьих, создайте подготовленный оператор для выполнения оператора SELECT:

$stmt = $this->conn->prepare($sql);

В-четвертых, выполните оператор SELECT с ассоциативным массивом, который сопоставляет заполнитель :id со значением $authorId:

$stmt->execute(['id' => $authorId]);

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

$row = $stmt->fetch(\PDO::FETCH_ASSOC);

Обратите внимание, что режим выборки \PDO::FETCH_ASSOC предписывает PDO возвращать набор результатов в виде ассоциативного массива.

Наконец, создайте объект Author из каждой строки в наборе результатов и верните его:

return $row ? new Author($row['FirstName'], $row['LastName'], $row['BirthDate'], $row['AuthorID']) : null;

Шаг 2. Измените index.php и используйте метод findById, чтобы найти автора с идентификатором 1:

findById(1);
if($author != null) {
    echo 'Author: ' . $author->getFirstName() . ' ' . $author->getLastName();
}

Как это работает.

Сначала включите authordb.php, чтобы гарантировать доступность класса AuthorDB в скрипте:

require_once 'authordb.php';

Во-вторых, подключитесь к SQL Server и назначьте объект PDO переменной $conn:

$conn = require_once 'connect.php';

В-третьих, создайте новый объект AuthorDB с объектом $conn:

$authorDB = new AuthorDB($conn);

В-четвертых, извлеките автора с идентификатором 1, вызвав метод findById() объекта AuthorDB:

$author = $authorDB->findById(1);

Наконец, отобразите имя и фамилию автора, если объект $author не равен null:

if($author != null) {
    echo 'Author: ' . $author->getFirstName() . ' ' . $author->getLastName();
}

Шаг 3. Запустите файл index.php в веб-браузере.

На странице отобразится следующий текст:

Author: Anthony Pham

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

Шаг 1. Определите метод findAll() в классе AuthorDB, который извлекает все строки из таблицы Authors:

public function findAll()
{
    $sql = 'SELECT * FROM Authors ORDER BY FirstName';
    $stmt = $this->conn->query($sql);
    $authors = [];
    while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
        $authors[] = new Author($row['FirstName'], $row['LastName'], $row['BirthDate'], $row['AuthorID']);
    }
    return $authors;
}

Как это работает.

Сначала определите метод с именем findAll():

function findById(int $authorId)

Во-вторых, создайте оператор SELECT, который извлекает все столбцы и строки из таблицы Authors, отсортированные по именам:

$sql = 'SELECT * FROM Authors ORDER BY FirstName';

В-третьих, создайте оператор для выполнения оператора SELECT:

$stmt = $this->conn->query($sql);

В-четвертых, инициализируем пустой массив, в котором хранятся объекты Author:

$authors = [];

В-пятых, извлеките каждую строку из набора результатов, создайте из каждой объект Author и добавьте его в массив $authors:

while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
   $authors[] = new Author($row['FirstName'], $row['LastName'], $row['BirthDate'], $row['AuthorID']);
}

Наконец, верните объект $authors:

return $authors;

Шаг 2. Измените index.php для использования метода findAll():

findAll();
foreach($authors as $author) {
    echo $author->getFirstName() . ' ' . $author->getLastName() . '
';
}

Как это работает.

Сначала включите файл authordb.php для использования класса AuthorDB в скрипте:

require_once 'authordb.php';

Во-вторых, подключитесь к SQL Server и назначьте объект PDO объекту $conn:

$conn = require_once 'connect.php';

В-третьих, создайте объект AuthorDB с предоставленным объектом PDO($conn):

$authorDB = new AuthorDB($conn);

В-четвертых, извлеките все строки из таблицы Authors и верните массив объектов Author:

$authors = $authorDB->findAll();

Наконец, отобразите имя и фамилию автора:

foreach($authors as $author) {
    echo $author->getFirstName() . ' ' . $author->getLastName() . '
';
}

Шаг 3. Откройте index.php в веб-браузере.

Он должен вернуть список авторов:

Alexander Turner
Ann Kelly
Anthony Pham
Barbara Lopez
Charles Nicholson
...

Краткое содержание

  • Выполните оператор SELECT для извлечения данных из таблицы.
Мирослав С.

Автор статей, ИБ-специалист