-
Notifications
You must be signed in to change notification settings - Fork 39
Удобная обертка для PDO
// config file db.php
return array(
"connect" => array(
"type" => "mysql",
"host" => "localhost",
"name" => "bluz",
"user" => "root",
"pass" => "",
"options" => array(
\PDO::ATTR_PERSISTENT => true
)
),
"attributes" => array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
)
);
с версии 0.6.0 изменился способ вызова - теперь рекомендуется использовать Proxy
Для настройки соединения следует использовать метод setConnect()
:
// init settings, not connect!
$db->setConnect(array(
'type' => 'mysql',
'host' => 'localhost',
'name' => 'db name',
'user' => 'root',
'pass' => ''
));
Затем можно уже вызвать метод connect()
и disconnect()
при необходимости.
Метод handler()
автоматически вызывает метод connect()
и возвращает объект PDO
// quote variable
$db->quote($id)
// quote column name
$db->quoteIdentifier($column)
Для запросов к БД, которые не требуют возврата данных следует использовать метод query(/*string*/ $sql)
:
// query
$db->query("SET NAMES 'utf8'");
Запросы INSERT
, UPDATE
и DELETE
также идут через метод query()
и он вернёт для них количество затронутых строк (см. rowcount).
Выбираем один элемент fetchOne(/*string*/ $sql, /*array*/ $params = [])
:
// get one
$db->fetchOne("SELECT COUNT(*) FROM test");
Результат:
42
Выбираем одну строку fetchRow(/*string*/ $sql, /*array*/ $params = [])
:
$id = 1;
// get row array
$db->fetchRow("SELECT * FROM users WHERE id = ". $db->quote($id));
$db->fetchRow("SELECT * FROM users WHERE id = ?", array($id));
$db->fetchRow("SELECT * FROM users WHERE id = :id", array(':id'=>$id));
Результат одинаковый для всех вызовов:
['id'=>1, 'login'=>'admin']
Выборка набора строк fetchAll(/*string*/ $sql, /*array*/ $params = [])
:
// get array
$db->fetchAll("SELECT * FROM users WHERE ip = ?", array('127.0.0.1'));
Результат:
[
['id'=>1, 'login'=>'admin'],
['id'=>2, 'login'=>'user'],
['id'=>3, 'login'=>'another'],
]
Получение колонки из таблицы fetchColumn(/*string*/ $sql, /*array*/ $params = [])
:
// get column
$db->fetchColumn("SELECT login FROM users WHERE ip = :ip", array(':ip'=>'127.0.0.1'));
Результатом будет простой одномерный массив содержащий запрашиваемую колонку:
['admin', 'user', 'another']
Получение связки ключ-значение fetchPairs(/*string*/ $sql, /*array*/ $params = [])
:
// get pairs
$db->fetchPairs("SELECT ip, COUNT(id) FROM users GROUP BY ip LIMIT 2");
Результатом будет ассоциативный одномерный массив:
['127.0.0.1' => 3, '192.168.1.1' => 2]
Выборка с группировкой по первому полю fetchGroup(/*string*/ $sql, /*array*/ $params = [])
:
// get group
$db->fetchGroup("SELECT ip, id, login FROM users");
Результатом будет ассоциативный многомерный массив:
[
'127.0.0.1' => [
['id'=>1, 'login'=>'admin'],
['id'=>2, 'login'=>'user'],
['id'=>3, 'login'=>'another'],
],
'192.168.1.1' => [
['id'=>4, 'login'=>'ivanov'],
['id'=>5, 'login'=>'petrov'],
],
]
Если вам надо выбрать результат как
"42" => ["id"=>42, "login"=>"Name"]
, то можно использовать методfetchGroup()
, но в дальнейшем обработай запрос$result = array_map('reset', $result);
Выборка колонки с группировкой по первому полю fetchColumnGroup(/*string*/ $sql, /*array*/ $params = [])
:
// get column by group
$db->fetchColumnGroup("SELECT ip, id FROM users");
Результатом будет ассоциативный массив:
[
'127.0.0.1' => [1, 2, 3],
'192.168.1.1' => [4, 5],
]
Следующие запросы устанавливают fetch mode
в \PDO::FETCH_OBJ
, \PDO::FETCH_INTO
или \PDO::FETCH_CLASS
в зависимости от 3-го параметра функции, что позволяет работать нам с результатами выборок как с соответствующими объектами:
// get object
// .. to stdClass
$stdClass = $db->fetchObject('SELECT * FROM some_table WHERE id = ?', array($id));
// .. to new Some object
$someClass = $db->fetchObject('SELECT * FROM some_table WHERE id = ?', array($id), 'Some');
// .. to exists instance of Some object
$someClass = $db->fetchObject('SELECT * FROM some_table WHERE id = ?', array($id), $someClass);
Синтаксис использования метода fetchObjects
аналогичен приведенному выше, различие заключается лишь в результате.
-
select()
- возвращает соответствующий конструктор запроса - select -
insert()
- insert -
update()
- update -
delete()
- delete
// controller code
if (Db::transaction(function() {
Db::delete('acl_privileges')->execute();
})) {
Messages::addSuccess('All data was saved');
} else {
Messages::addError('Internal server error');
}
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View