PDO
Выборка информации из базы данных
Запрос на выборку данных:
$sql = 'SELECT id, title FROM news';
Метод query()
Для выполнения sql-запросов типа SELECT (запрос, который должен вернуть результат) средствами с расширением PDO мы должны воспользоваться методом объекта PDO - query(), в качестве первого параметра передаем sql-запрос.
При этом возвращается специальный объект результата выполненного запроса (Statement), который мы можем использовать для получения готового результата.
$result = $pdo -> ($sql);
Файл index.php
-- файл index.php --
<?php
// Подключение к базе данных
try{
$pdo = new
('mysql:host=localhost;dbname=test2';charset=utf-8, 'root', '');
$pdo-> ( ::ATTR_ERRMODE, ::ERRMODE_EXCEPTION);
echo "Успешное подключение <br><br>";
}catch{
exit ('Ошибка подключения: <br>' . $e -> ());
}
// Выполнение запроса
try{
-------------------------------------------------------------------
$sql = 'SELECT id, title FROM news';
$result = $pdo -> ($sql);
($result); // распечатаем
--------------------------------------------------------------------
} catch{
exit ('Ошибка в запросе: <br><br>' . $e -> ());
}
?>
Выведет:
PDOStatement Object ( [queryString] => SELECT id, title FROM news )
Использование цикла foreach для выборки данных и получения готового результата
(проходимся по объекту $result, как будто это обычный массив)
foreach ($result as $row){
echo "<p>" . $row['id'] . " | " . $row['title'];
}
Файл index.php
-- файл index.php --
<?php
// Подключение к базе данных
try{
$pdo = new
('mysql:host=localhost;dbname=test2';charset=utf-8, 'root', '');
$pdo-> ( ::ATTR_ERRMODE, ::ERRMODE_EXCEPTION);
echo "Успешное подключение <br><br>";
}catch{
exit ('Ошибка подключения: <br>' . $e -> ());
}
// Выполнение запроса
try{
-------------------------------------------------------------------
$sql = 'SELECT id, title FROM news';
$result = $pdo -> ($sql);
// Использование цикла foreach:
foreach ($result as $row){
echo "<p>" . $row['id'] . " | " . $row['title'];
}
--------------------------------------------------------------------
} catch{
exit ('Ошибка в запросе: <br><br>' . $e -> ());
}
?>
Выведет:
1 | Новость 1
2 | Новость 2
3 | Новость 3
4 | Новость 4
5 | Новость 5
Метод fetch()
Использование цикла while
Для выборки данных и получения готового результата можно использовать метод fetch() объекта PDOStatement
Метод fetch() извлекает следующую строку из результирующего набора.
В качестве параметра мы передаем одну из констант (стиль работы данного метода):
PDO::FETCH_ASSOC - метод fetch() в качестве результата своей работы будет возвращать ассоциативный массив.
while($row = $result -> ( :: FETCH_ASSOC)){
echo "<p>" . $row['id'] . " | " . $row['title'];
}
PDO::FETCH_NUM - возвращает данные в виде простого индексного массива. В этом случае необходимо обращаться к ячейкам по их индексам:
while($row = $result -> ( :: PDO::FETCH_NUM)){
echo "<p>" . $row[0] . " | " . $row[1];
}
PDO::FETCH_BOTH (по умолчанию) - возвращает данные в виде и ассоциативного массив и простого индексного массива. Обращаться можно как по именам ячеек, так и по их индексам.
PDO::FETCH_OBJ - возвращает данные в виде объекта. В этом случае в переменной $row мы получим объект и обращаться будем к его свойствам:
while($row = $result -> ( :: PDO::FETCH_NUM)){
// Здесь обращаемся к свойствам объекта $row
echo "<p>" . $row->id . " | " . $row->title;
}
Файл index.php
-- файл index.php --
<?php
// Подключение к базе данных
try{
$pdo = new
('mysql:host=localhost;dbname=test2';charset=utf-8, 'root', '');
$pdo-> ( ::ATTR_ERRMODE, ::ERRMODE_EXCEPTION);
echo "Успешное подключение <br><br>";
}catch{
exit ('Ошибка подключения: <br>' . $e -> ());
}
// Выполнение запроса
try{
-------------------------------------------------------------------
$sql = 'SELECT id, title FROM news';
$result = $pdo -> ($sql);
// Использование цикла while и константы FETCH_ASSOC:
while($row = $result -> ( :: FETCH_ASSOC)){
echo "<p>" . $row['id'] . " | " . $row['title'];
}
--------------------------------------------------------------------
} catch{
exit ('Ошибка в запросе: <br><br>' . $e -> ());
}
?>
Выведет:
1 | Новость 1
2 | Новость 2
3 | Новость 3
4 | Новость 4
5 | Новость 5
- получаем такой же результат, как и при использовании цикла foreach
PDO::FETCH_CLASS - при использовании этой константы метод fetch() будет передавать данные непосредственно в специальный класс, имя которого мы должны задать в специальной настройке.
Соответственно, в переменную $row попадет уже объект этого класса. При этом в этот объект уже будут переданы данные в соответствующие свойства.
Перед вызовом метода fetch() мы должны обратиться к объекту класса PDOStatement и вызвать на исполнение метод setFetchMode.
Метод setFetchMode устанавливает режим работы метода fetch().
Первым параметром он принимает константу PDO::FETCH_CLASS, вторым - имя класса, в который будут переданы параметры и объект которого будут возвращен в качестве результата работы данного метода.
$result -> ( :: PDO::FETCH_CLASS, 'News');
while($row = $result -> ()){
// Здесь обращаемся к методам класса News (news.php)
echo "<p>" . $row-> () . " | " . $row-> ();
}
Создадим этот класс в котором будут два свойства (их имена совпадают с именами выбранных полей) и два метода.
Файл news.php
-- файл news.php --
<?php
class
{
protected $id;
protected $title;
// Метод будет возвращать значение свойства $id
public function (){
//... здесь мы можем производить какие-то манипуляции с данными свойствами ...
return $this->id;
}
// Метод будет возвращать значение свойства $title
public function (){
//.... здесь мы можем производить какие-то манипуляции с данными свойствами ...
return $this->title;
}
}
?>
В индексном файле подключаем класс news.php
Файл index.php
-- файл index.php --
<?php
include 'news.php'; // подключаем класс news.php
// Подключение к базе данных
try{
$pdo = new
('mysql:host=localhost;dbname=test2';charset=utf-8, 'root', '');
$pdo-> ( ::ATTR_ERRMODE, ::ERRMODE_EXCEPTION);
echo "Успешное подключение <br><br>";
}catch{
exit ('Ошибка подключения: <br>' . $e -> ());
}
// Выполнение запроса
try{
-------------------------------------------------------------------
$sql = 'SELECT id, title FROM news';
$result = $pdo -> ($sql);
// Использование константы PDO::FETCH_CLASS и метода setFetchMode
$result -> ( :: PDO::FETCH_CLASS, 'News');
while($row = $result -> ()){
// Здесь обращаемся к методам класса News (news.php)
echo "<p>" . $row-> () . " | " . $row-> ();
}
--------------------------------------------------------------------
} catch{
exit ('Ошибка в запросе: <br><br>' . $e -> ());
}
?>
Выведет:
1 | Новость 1
2 | Новость 2
3 | Новость 3
4 | Новость 4
5 | Новость 5
- во всех случаях получаем один и тот же же результат.
Метод fetchAll()
Метод fetchAll() - возвращает массив, содержащий все строки результирующего набора
Этот метод удобен тем, что один раз его вызвав, мы сразу получаем массив выбранных данных.
Метод fetchAll() и константа PDO::FETCH_ASSOC
$result -> ( :: FETCH_ASSOC);
($result -> ());
Получаем многомерный массив:
Array
(
[0] => Array
(
[id] => 1
[title] => Новость 1
)
[1] => Array
(
[id] => 2
[title] => Новость 2
)
[2] => Array
(
[id] => 3
[title] => Новость 3
)
[3] => Array
(
[id] => 4
[title] => Новость 4
)
[4] => Array
(
[id] => 5
[title] => Новость 5
)
)
Метод fetchAll() и константа PDO::FETCH_OBJ
$result -> ( :: FETCH_OBJ);
($result -> ());
Получаем массив объектов:
Array
(
[0] => stdClass Object
(
[id] => 1
[title] => Новость 1
)
[1] => stdClass Object
(
[id] => 2
[title] => Новость 2
)
.............................
.............................
.............................
)
Наверх Наверх