В этом уроке вы узнаете, как выбрать одну или несколько строк из таблицы 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 для извлечения данных из таблицы.