Php function return sql query

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

Для выполнения 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
)
.
.
.
)

Источник

PDO::query

PDO::query() prepares and executes an SQL statement in a single function call, returning the statement as a PDOStatement object.

For a query that you need to issue multiple times, you will realize better performance if you prepare a PDOStatement object using PDO::prepare() and issue the statement with multiple calls to PDOStatement::execute() .

If you do not fetch all of the data in a result set before issuing your next call to PDO::query() , your call may fail. Call PDOStatement::closeCursor() to release the database resources associated with the PDOStatement object before issuing your next call to PDO::query() .

Note:

If the query contains placeholders, the statement must be prepared and executed separately using PDO::prepare() and PDOStatement::execute() methods.

Parameters

The SQL statement to prepare and execute.

If the SQL contains placeholders, PDO::prepare() and PDOStatement::execute() must be used instead. Alternatively, the SQL can be prepared manually before calling PDO::query() , with the data properly formatted using PDO::quote() if the driver supports it.

The default fetch mode for the returned PDOStatement . It must be one of the PDO::FETCH_* constants.

If this argument is passed to the function, the remaining arguments will be treated as though PDOStatement::setFetchMode() was called on the resultant statement object. The subsequent arguments vary depending on the selected fetch mode.

Return Values

Returns a PDOStatement object or false on failure.

Errors/Exceptions

Emits an error with level E_WARNING if the attribute PDO::ATTR_ERRMODE is set to PDO::ERRMODE_WARNING .

Throws a PDOException if the attribute PDO::ATTR_ERRMODE is set to PDO::ERRMODE_EXCEPTION .

Examples

Example #1 SQL with no placeholders can be executed using PDO::query()

$sql = ‘SELECT name, color, calories FROM fruit ORDER BY name’ ;
foreach ( $conn -> query ( $sql ) as $row ) print $row [ ‘name’ ] . «\t» ;
print $row [ ‘color’ ] . «\t» ;
print $row [ ‘calories’ ] . «\n» ;
>
?>

The above example will output:

apple red 150 banana yellow 250 kiwi brown 75 lemon yellow 25 orange orange 300 pear green 150 watermelon pink 90

See Also

  • PDO::exec() — Execute an SQL statement and return the number of affected rows
  • PDO::prepare() — Prepares a statement for execution and returns a statement object
  • PDOStatement::execute() — Executes a prepared statement

Источник

Читайте также:  Элементы физической разметки
Оцените статью