-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWDBDataReader.php
142 lines (122 loc) · 5.71 KB
/
WDBDataReader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/**
* Этот файл содержит WDBDataReader class.
*
* @author WonderTalik <[email protected]>
* @link http://it.bitmaster.dp.ua/
* Date: ${DATE}
* Time: ${TIME}
* @copyright 2013
*/
namespace bitmaster\db;
use \PDO;
use \PDOStatement;
/**
* WDBDataReader предоставляет методы для обработки данных, полученных
* после выполнения SELECT запроса к бд.
* @package bitmaster\db
* @version 0.0.1
*/
class WDBDataReader {
/**
* @var PDOStatement ссылка на объект подготовленного запроса к БД
*/
private $_statement;
/**
* @var mixed текущая считанная строка
*/
private $_row;
/**
* Конструктор
* @param WDBCommand $command
* @since 0.0.1
*/
public function __construct(WDBCommand $command) {
$this->_statement = $command->getPdoStatement();
$this->setFetchMode();
}
/**
* Задает режим выборки по умолчанию для объекта запроса.
* @param mixed $mode режим выборки
* @see http://ua1.php.net/manual/ru/pdostatement.setfetchmode.php
* @since 0.0.1
*/
private function setFetchMode($mode = PDO::FETCH_ASSOC) {
$this->_statement->setFetchMode($mode);
}
/**
* Извлечение следующей строки из результирующего набора. Возвращает массив,
* индексированный именами столбцов результирующего набора
* @return array|bool текущая строка, false если больше нет доступных строк
* @see http://ua1.php.net/manual/ru/pdostatement.fetch.php
* @since 0.0.1
*/
public function readFetchAssoc() {
$this->setFetchMode(PDO::FETCH_ASSOC);
return $this->_row = $this->_statement->fetch();
}
/**
* Извлечение следующей строки из результирующего набора. Возвращает массив,
* индексированный номерами столбцов (начиная с 0)
* @return array|bool текущая строка, false если больше нет доступных строк
* @see http://ua1.php.net/manual/ru/pdostatement.fetch.php
* @since 0.0.1
*/
public function readFetchNum() {
$this->setFetchMode(PDO::FETCH_NUM);
return $this->_row = $this->_statement->fetch();
}
/**
* Извлечение следующей строки из результирующего набора. Возвращает массив,
* индексированный именами столбцов результирующего набора, а также их номерами (начиная с 0)
* @return array|bool текущая строка, false если больше нет доступных строк
* @see http://ua1.php.net/manual/ru/pdostatement.fetch.php
* @since 0.0.1
*/
public function read() {
$this->setFetchMode(PDO::FETCH_BOTH);
return $this->_row = $this->_statement->fetch();
}
/**
* Возвращает данные одного столбца следующей строки результирующего набора.
* @param integer $columnIndex zero-based column index
* @return mixed|bool значение поля текущей строки, false если больше нет доступных строк
* @see http://ua1.php.net/manual/ru/pdostatement.fetchcolumn.php
* @since 0.0.1
*/
public function readColumn($columnIndex = 0) {
return $this->_statement->fetchColumn($columnIndex);
}
/**
* Возвращает количество строк, которые были затронуты в ходе выполнения последнего запроса
* DELETE, INSERT или UPDATE
* К сведению, для большинства СУБД PDOStatement::rowCount() не возвращает количество строк,
* затронутых SELECT запросом. Вместо этого метода запустите через PDO::query() выражение
* SELECT COUNT(*) с тем же текстом запроса. Затем методом PDOStatement::fetchColumn() вы
* получите число строк в результирующем наборе. Эта методика будет работать со всеми СУБД.
* @see http://ua1.php.net/manual/ru/pdostatement.rowcount.php
* @since 0.0.1
*/
public function getRowCount() {
return $this->_statement->rowCount();
}
/**
* Возвращает текущую считанную строку.
* @return mixed текущая строка.
* @since 0.0.1
*/
public function current() {
return $this->_row;
}
/**
* Возвращает количество столбцов в результирующем наборе запроса PDOStatement.
* Внимание, если нет результирующих строк, количество столбцов все равно вернет верное.
* @return integer|0 integer количество столбцов в результирующем наборе запроса,
* 0 если результирующего набора нет.
* @see http://ua1.php.net/manual/ru/pdostatement.columncount.php
* @since 0.0.1
*/
public function getColumnCount() {
return $this->_statement->columnCount();
}
}