-
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