Php pdo select to array

Примеры использования PDO MySQL

Ниже приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и удаление данных. Подробнее о методах PDO можно узнать на php.net.

Для примеров используется таблица `category` с полями `id` , `name` и `parent` .

Подключение к серверу MySQL

$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');

Четвертым параметром конструктора PDO можно указать параметры подключения, например SQL запрос который будет выполнен сразу после подключения:

$dbh = new PDO(' mysql:dbname=db_name;host=localhost', 'логин', 'пароль', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'") );

Чтобы отследить ошибку подключения к БД используется исключение:

try < $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); >catch (PDOException $e) < die($e->getMessage()); >
SQLSTATE[HY000] [1045] Access denied for user 'логин'@'localhost' (using password: YES)

Выборка из БД

Выборка одной записи

PDO позволяет использовать в запросах псевдопеременные чтобы исключить SQL инъекции. В самом запросе в место данных указывается ? или :id , а в методе execute() указываются реальные значения этих переменных.

$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = ?"); $sth->execute(array('21')); $array = $sth->fetch(PDO::FETCH_ASSOC); print_r($array);
$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = :id"); $sth->execute(array('id' => '21')); $array = $sth->fetch(PDO::FETCH_ASSOC); print_r($array);
Array ( [id] => 21 [parent] => 3 [name] => Хурма ) 

Выборка всех записей таблицы

Данный пример получает всю таблицу в виде ассоциативного массива:

$sth = $dbh->prepare("SELECT * FROM `category` ORDER BY `name`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC); print_r($array);
Array ( [0] => Array ( [id] => 16 [parent] => 3 [name] => Абрикос ) [1] => Array ( [id] => 28 [parent] => 3 [name] => Авокадо ) . )

Получить значение поля одной записи

$sth = $dbh->prepare("SELECT `name` FROM `category` WHERE `id` = ?"); $sth->execute(array('21')); $value = $sth->fetch(PDO::FETCH_COLUMN); echo $value; // Выведет "Хурма"

Получение всех значений одного столбца таблицы

Пример получает все значения поля `name` из таблицы `category` .

$sth = $dbh->prepare("SELECT `name` FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_COLUMN); print_r($array);
Array ( [0] => Мороженое [1] => Овощи [2] => Фрукты [3] => Ягоды [4] => Грибы [5] => Морепродукты [6] => Смеси . )

Получение структуры таблицы

$sth = $dbh->prepare("SHOW COLUMNS FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC); print_r($array);
Array ( [0] => Array ( [Field] => id [Type] => int(10) unsigned [Null] => NO Php pdo select to array => PRI [Default] => [Extra] => auto_increment ) [1] => Array ( [Field] => parent [Type] => int(11) unsigned [Null] => NO Php pdo select to array => [Default] => 0 [Extra] => ) [2] => Array ( [Field] => name [Type] => varchar(255) [Null] => NO Php pdo select to array => [Default] => [Extra] => ) )

Добавление записей в БД

$sth = $dbh->prepare("INSERT INTO `category` SET `parent` = :parent, `name` = :name"); $sth->execute(array('parent' => 1, 'name' => 'Виноград')); // Получаем id вставленной записи $insert_id = $dbh->lastInsertId();

Изменение записей

$sth = $dbh->prepare("UPDATE `category` SET `name` = :name WHERE `id` = :id"); $sth->execute(array('name' => 'Виноград', 'id' => 22));

Удаление из БД

$count = $dbh->exec("DELETE FROM `category` WHERE `parent` = 1"); echo 'Удалено ' . $count . ' строк.';

Или метод c псевдопеременными:

$sth = $dbh->prepare("DELETE FROM `category` WHERE `parent` = :parent"); $sth->execute(array('parent' => 1));

Обработка ошибок

В PDO есть метод errorInfo() который возвращает сведенья об ошибке последнего запроса.

// Таблицы `category_new` нет в БД. $sth = $dbh->prepare("INSERT INTO `category_new` SET `parent` = :parent, `name` = :name"); $sth->execute(array('parent' => 1, 'name' => 'Виноград')); $info = $sth->errorInfo(); print_r($info);
Array ( [0] => 42S02 [1] => 1146 [2] => Table 'database.category_new' doesn't exist )

Комментарии 1

О

Функция debugDumpParams объекта PDOStatement используется для вывода параметров подготовленного оператора. Это может быть полезно для отладки и устранения неполадок, поскольку позволяет увидеть точный SQL-запрос, который будет выполнен, а также значения любых установленных заполнителей.
Например, рассмотрим следующий код:

$sth = $dbh->prepare(‘SELECT * FROM users WHERE name = :name AND age = :age’);
$sth->bindParam(‘:name’, $name);
$sth->bindParam(‘:age’, $age);
$name = ‘John’;
$age = 35;
$sth->debugDumpParams();

SQL: [114] SELECT * FROM users WHERE name = :name AND age = :age
Params: 2
Key: Name: [5] :name
paramno=-1
name=[5] «:name»
is_param=1
param_type=2
Key: Name: [4] :age
paramno=-1
name=[4] «:age»
is_param=1
param_type=2

Вывод показывает SQL-запрос с заполнителями и значениями заполнителей (в данном случае :name — «John», а :age — 35). Это может быть полезно для проверки того, что в запросе используются правильные значения, или для выявления проблем с запросом или заполнителями.
Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы.

Авторизуйтесь, чтобы добавить комментарий.

Источник

Выборка информации из базы данных

Для выполнения sql-запросов типа SELECT (запрос, который должен вернуть результат) средствами с расширением PDO мы должны воспользоваться методом объекта PDO — query() , в качестве первого параметра передаем sql-запрос.

При этом возвращается специальный объект результата выполненного запроса (Statement), который мы можем использовать для получения готового результата.

// Подключение к базе данных
try <
$pdo = new PDO ( ‘mysql:host=localhost;dbname=test2’;charset=utf-8 , ‘root’ , » );
$pdo -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
echo «Успешное подключение

» ;
> catch exit ( ‘Ошибка подключения:
. $e -> getMessage ());
>

> catch exit ( ‘Ошибка в запросе:

. $e -> getMessage ());
>
?>

Выведет:
PDOStatement Object ( [queryString] => SELECT id, title FROM news )

Использование цикла foreach для выборки данных и получения готового результата

(проходимся по объекту $result , как будто это обычный массив)

foreach ( $result as $row ) echo «

» . $row [ ‘id’ ] . » | » . $row [ ‘title’ ];
>

// Подключение к базе данных
try <
$pdo = new PDO ( ‘mysql:host=localhost;dbname=test2’;charset=utf-8 , ‘root’ , » );
$pdo -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
echo «Успешное подключение

» ;
> catch exit ( ‘Ошибка подключения:
. $e -> getMessage ());
>

> catch exit ( ‘Ошибка в запросе:

. $e -> getMessage ());
>
?>

Выведет:
1 | Новость 1
2 | Новость 2
3 | Новость 3
4 | Новость 4
5 | Новость 5

Метод fetch()

Использование цикла while

Для выборки данных и получения готового результата можно использовать метод fetch() объекта PDOStatement

Метод fetch() извлекает следующую строку из результирующего набора .

В качестве параметра мы передаем одну из констант (стиль работы данного метода):

PDO::FETCH_ASSOC — метод fetch() в качестве результата своей работы будет возвращать ассоциативный массив.

while ( $row = $result -> fetch ( PDO :: FETCH_ASSOC )) echo «

» . $row [ ‘id’ ] . » | » . $row [ ‘title’ ];
>

PDO::FETCH_NUM — возвращает данные в виде простого индексного массива. В этом случае необходимо обращаться к ячейкам по их индексам:

while ( $row = $result -> fetch ( PDO :: PDO::FETCH_NUM )) echo «

» . $row [ 0 ] . » | » . $row [ 1 ];
>

PDO::FETCH_BOTH (по умолчанию) — возвращает данные в виде и ассоциативного массив и простого индексного массива. Обращаться можно как по именам ячеек, так и по их индексам.

PDO::FETCH_OBJ — возвращает данные в виде объекта. В этом случае в переменной $row мы получим объект и обращаться будем к его свойствам :

while ( $row = $result -> fetch ( PDO :: PDO::FETCH_NUM )) // Здесь обращаемся к свойствам объекта $row
echo «

» . $row -> id . » | » . $row -> title ;
>

// Подключение к базе данных
try <
$pdo = new PDO ( ‘mysql:host=localhost;dbname=test2’;charset=utf-8 , ‘root’ , » );
$pdo -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
echo «Успешное подключение

» ;
> catch exit ( ‘Ошибка подключения:
. $e -> getMessage ());
>

// Использование цикла while и константы FETCH_ASSOC:
while ( $row = $result -> fetch ( PDO :: FETCH_ASSOC )) echo «

» . $row [ ‘id’ ] . » | » . $row [ ‘title’ ];
>
———————————————————————

> catch exit ( ‘Ошибка в запросе:

. $e -> getMessage ());
>
?>

Выведет:
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 -> setFetchMode ( PDO :: PDO::FETCH_CLASS , ‘News’ );
while ( $row = $result -> fetch ()) // Здесь обращаемся к методам класса News (news.php)
echo «

» . $row -> getId () . » | » . $row -> getTitle ();
>

Создадим этот класс в котором будут два свойства (их имена совпадают с именами выбранных полей) и два метода.

class News
<
protected $id ;
protected $title ;

// Метод будет возвращать значение свойства $id
public function getId () //. здесь мы можем производить какие-то манипуляции с данными свойствами .
return $this -> id ;
>

// Метод будет возвращать значение свойства $title
public function getTitle () //. здесь мы можем производить какие-то манипуляции с данными свойствами .
return $this -> title ;
>
>
?>

В индексном файле подключаем класс news.php

include ‘news.php’ ; // подключаем класс news.php

// Подключение к базе данных
try <
$pdo = new PDO ( ‘mysql:host=localhost;dbname=test2’;charset=utf-8 , ‘root’ , » );
$pdo -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
echo «Успешное подключение

» ;
> catch exit ( ‘Ошибка подключения:
. $e -> getMessage ());
>

// Использование константы PDO::FETCH_CLASS и метода setFetchMode
$result -> setFetchMode ( PDO :: PDO::FETCH_CLASS , ‘News’);
while ( $row = $result -> fetch ()) // Здесь обращаемся к методам класса News (news.php)
echo «

» . $row -> getId () . » | » . $row -> getTitle ();
>
———————————————————————

> catch exit ( ‘Ошибка в запросе:

. $e -> getMessage ());
>
?>

Выведет:
1 | Новость 1
2 | Новость 2
3 | Новость 3
4 | Новость 4
5 | Новость 5

— во всех случаях получаем один и тот же же результат.

Метод fetchAll()

Метод fetchAll() — возвращает массив, содержащий все строки результирующего набора

Этот метод удобен тем, что один раз его вызвав, мы сразу получаем массив выбранных данных.

Метод fetchAll() и константа PDO::FETCH_ASSOC

$result -> setFetchMode ( PDO :: FETCH_ASSOC );
print_r ( $result -> fetchAll ());

Получаем многомерный массив:
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 -> setFetchMode ( PDO :: FETCH_OBJ );
print_r ( $result -> fetchAll ());

Получаем массив объектов:
Array
( [0] => stdClass Object
(
[id] => 1
[title] => Новость 1
)
[1] => stdClass Object
(
[id] => 2
[title] => Новость 2
)
.
.
.
)

Источник

Читайте также:  Html code to align text center
Оцените статью