Функции для работы с базой данных¶
Содержание
- db_query — любой SQL запрос
- db_quote — валидация SQL запроса
- db_get_field — получить значение ячейки
- db_get_row — получить строку данных по значению
- db_get_fields — получить список данных
- db_get_array — получить массив данных
- db_get_hash_array — получить массив данных c особыми ключами
- db_get_hash_single_array — получить массив вида “ключ => значение”
- db_get_hash_multi_array — массив данных (группировка и заданные ключи)
- db_get_hash_multi_array — массив данных (группировка, фильтрация, заданные ключи)
db_query — любой SQL запрос¶
Пример:
db_query('UPDATE ?:users SET status = ?s WHERE user_id = ?i', 'A', 1);
Для запросов DELETE, UPDATE и мульти INSERT , функция возвращает количество затронутых записей.
Для обычного INSERT запроса, функция вернёт ID созданного объекта
Пример:
// Создадим нового покупателя
$user_data = array(
'email' => 'user@dbazhenov.ru',
'user_type' => 'C',
'status' => 'A',
);
$user_id = db_query('INSERT INTO ?:users ?e', $user_data);
// Распечатаем результат
fn_print_r($user_id);
Результат:
Примечание
id нового покупателя в переменной $user_id, в моём случае:
17
db_quote — валидация SQL запроса¶
Можно использовать склеивания больших запросов с раличными условиями, а также для быстрой проверки плейсхолдеров.
Функция возвращает готовый SQL запрос в виде строки.
Пример:
$sql_string = db_quote('UPDATE ?:products SET list_price = ?d WHERE product_id = ?i', 123.45678910, '12 OR true');
fn_print_r($sql_string);
Результат:
Примечание
UPDATE cscart_products SET list_price = 123.46 WHERE product_id = 12
db_get_field — получить значение ячейки¶
Пример:
// Получим email пользователя с ID = 1.
$email = db_get_field("SELECT email FROM ?:users WHERE user_id = ?i", 1);
// Распечатаем результат
fn_print_r($email);
Результат:
Примечание
dbazhenov@cs-cart.ru
db_get_row — получить строку данных по значению¶
Пример:
// Получим массив данных пользователя с user_id = 1.
$user_data = db_get_row("SELECT user_id, user_type, email FROM ?:users WHERE user_id = ?i", 1);
// Распечатаем результат
fn_print_r($user_data);
Результат:
Примечание
Array
(
[user_id] => 1
[user_type] => A
[email] => dbazhenov@cs-cart.ru
)
db_get_fields — получить список данных¶
Пример:
// Получим список email активных покупателей.
$active_emails = db_get_fields("SELECT email FROM ?:users WHERE status = ?s", 'A');
// Распечатаем результат
fn_print_r($active_emails);
Результат:
Примечание
Array
(
[0] => dbazhenov@cs-cart.ru
[1] => customer@example.com
[2] => user1@example.com
)
db_get_array — получить массив данных¶
Пример:
// Получим массив данных всех активных покупателей.
$active_users = db_get_array("SELECT user_id, user_type, email FROM ?:users WHERE status = ?s", 'A');
// Распечатаем результат
fn_print_r($active_users);
Результат:
Примечание
Результат:
Array
(
[0] => Array
(
[user_id] => 1
[user_type] => A
[email] => dbazhenov@cs-cart.ru
)
[1] => Array
(
[user_id] => 3
[user_type] => C
[email] => customer@example.com
)
[2] => Array
(
[user_id] => 4
[user_type] => C
[email] => user1@example.com
)
)
db_get_hash_array — получить массив данных c особыми ключами¶
Вторым аргументов в функцию передаётся название поля значение которого будет ключом.
Пример:
// Получим массив заказов, ключами массива будут ID заказов, для этого передаём в функцию вторым параметром: 'order_id'.
$orders = db_get_hash_array("SELECT order_id, total, subtotal, status FROM ?:orders WHERE user_id = ?i", 'order_id', 7);
// Распечатаем результат
fn_print_r($orders);
Результат:
Примечание
Array
(
[52] => Array
(
[order_id] => 52
[total] => 2099.35
[subtotal] => 1869.35
[status] => C
)
[63] => Array
(
[order_id] => 63
[total] => 2425.00
[subtotal] => 1925.00
[status] => C
)
[67] => Array
(
[order_id] => 67
[total] => 2779.90
[subtotal] => 2279.90
[status] => C
)
)
db_get_hash_single_array — получить массив вида “ключ => значени唶
Вторым аргументом необходимо передать в функцию массив вида array('[field_for_key]', '[field_for_value]')
Пример 1.
// Получим массив email => имя
$emails = db_get_hash_single_array("SELECT email, firstname FROM ?:users", array('email', 'firstname'));
// Распечатаем результат.
fn_print_r($emails);
Результат:
Примечание
Array
(
[customer@example.com] => Покупатель
[user1@example.com] => Анна
[user2@example.com] => Мария
)
Пример 2.
// Получим массив order_id => код статуса
$order_statuses = db_get_hash_single_array("SELECT order_id, status FROM ?:orders", array('order_id', 'status'));
// Распечатаем результат.
fn_print_r($order_statuses);
Результат:
Примечание
Array
(
[1] => C
[2] => C
[3] => B
[4] => C
[5] => C
[6] => F
...
)
db_get_hash_multi_array — массив данных (группировка и заданные ключи)¶
Пример:
// Получим список заказов, заказы будут сгрупированы по статусу,
// в массиме будут все поля указанные в запросе по каждому заказу
// Для группировки передаём в плейсхолдер первым параметром: array('status','order_id')
$extra_orders_group = db_get_hash_multi_array("SELECT order_id, total, subtotal, status FROM ?:orders WHERE user_id = ?i", array('status','order_id'), 7);
// Распечатаем результат
fn_print_r($extra_orders_group);
Результат:
Примечание
Array
(
[C] => Array
(
[52] => Array
(
[order_id] => 52
[total] => 2099.35
[subtotal] => 1869.35
[status] => C
)
[63] => Array
(
[order_id] => 63
[total] => 2425.00
[subtotal] => 1925.00
[status] => C
)
...
)
[D] => Array
(
[68] => Array
(
[order_id] => 68
[total] => 3298.25
[subtotal] => 2798.25
[status] => D
)
)
)
db_get_hash_multi_array — массив данных (группировка, фильтрация, заданные ключи)¶
Вторым аргументом передаётся массив c полями по которым будет осуществляться группировка и фильтрация информации.
Пример:
// Получим список заказов, заказы будут сгрупированы по статусу,
// в массиве будет информация только о общей сумме заказа
// Для группировки передаём в плейсхолдер первым параметром: array('status','order_id', 'total')
$orders_group = db_get_hash_multi_array("SELECT order_id, total, subtotal, status FROM ?:orders WHERE user_id = ?i", array('status','order_id', 'total'), 7);
// Распечатаем результат
fn_print_r($orders_group);
Результат:
Примечание
Array
(
[C] => Array
(
[52] => 2099.35
[63] => 2425.00
[67] => 2779.90
[69] => 2600.00
[73] => 10499.65
[85] => 2232.50
[86] => 1399.30
)
[D] => Array
(
[68] => 3298.25
)
)