Функции для работы с базой данных¶
Содержание
- 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
        )
)