Skip to content

A CodeIgniter-based SQL helper that allows to make smart and easy replacements in queries and retrieve resulting resource in several formats on the fly

License

Notifications You must be signed in to change notification settings

alexey-kov/sql-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

sql-helper

A CodeIgniter-based SQL helper that allows to make smart and easy replacements in queries and retrieve resulting resource in several formats on the fly Current README is currently available only in Russian and will be updated to clarify some things

##Содержание:

##^ Символы подстановки:

($value в рамках данного описания соответсвует значению из массива $values; $CI обозначает объект возвращаемый get_instance() - Code_Igniter)

  • ~ - превращается в алиас поля MySQL ('zxc~' == 'zxc AS `$value`')
  • ! - превращается в число с плавающей точкой ('zxc = !' == 'zxc = (float) $value')
  • @ - превращается в цепочку текстовых значений через запятую ('IN(@)' == 'IN("'.implode('","',$value).'")') (здесь $value должен быть массивом) (строки экранируются посредством функции $CI->db->escape_str())
  • # - превращается в цепочку чисел с плавающей точкой через запятую ('IN(@)' == 'IN( (float) $value[0], (float) $value[1], ...)') (здесь $value должен быть массивом)
  • ? - превращается в текстовое значение ('zxc = ?' == 'zxc = "$value"') (строки экранируются посредством функции $CI->db->escape_str())
  • | - помещает значение в строку без изменений ('zxc = |' == 'zxc = $value', при $value == 'NULL' это будет означать, что 'zxc = |' == 'zxc = NULL')
  • & - нумерованная ссылка на значение из $values, &0 будет ссылаться на $values[0], &1 на $values[1] и так далее (доступны 100 значений, 0-99). Таким образом одно и тоже значение может быть использовано многократно в одном SQL-выражении
  • {} - специальная конструкция для работы с массивами (чаще всего в INSERT ... VALUES), которая подменяется блоками скобок (...), количество которых определяется длиной массива из подстановки. В случае если передается более одного массива, количество элементов в них должно совпадать или будет выброшено исключение. Допускаются как нумерованные (#), так и именованные (@) массивы. Если вместе с массивами будет передан строчный параметр (?,! или |), то его значение будет использовано во всех блоках скобок. (пример)

##^ Варианты значений $type для запросов возвращающих результат запроса:

  • sql - возвратит SQL-строку с подставленными значениями, не выполняя ее
  • one | ? - возвратит значение первой ячейки в виде строки (пример)
  • row | # | :# - возвратит первый ряд результата в виде массива с числовыми индексами (пример)
  • line | @ | :@ - возвратит первый ряд результата в виде хэш-массива, где имена ключей соответствуют именам колонок результата (пример)
  • col | #: | #:? - возвратит первую колонку результата в виде массива с числовыми индексами (пример)
  • num | #:# - возвратит числовой массив, где каждое значение будет числовым массивом полей строки результата (пример)
  • hash | #:@ - возвратит числовой массив, где каждое значение будет хэш-массивом полей одной строки результата, где ключи нижнего массива равны именам колонок результата (пример)
  • keycol | $: | $:?- возвратит массив ключами которого станут значения первой колонки результата, а значениями - значения второй колонки (пример)
  • key-num | $:# - возвратит массив, ключами которого станут значения первой колонки результата, а значениями числовые массивы с значениями остальных колонок результата (пример)
  • key-hash | $:@ - возвратит массив, ключами которого станут значения первой колонки результата, а значениями хэш-массивы с значениями остальных колонок результата, где ключи нижнего массива будут равны именам колонок результата (пример)
  • key-array | $:#? - возвратит массив, где ключами будут значения первой колонки результата, а значениями массив со всеми вариантами второй колонки результата (предполагается использование в тех случаях, когда первая колонка может иметь не уникальные значения) (пример)
  • key-array-array | $:## - возвратит массив, ключами которого будут значения первой колонки, а значениями - числовой массив числовых массивов со значениями остальных колонок (пример)
  • key-array-hash | $:#@ - возвратит массив , ключами которого будут значения первой колонки, а значениями - числовой массив хэш-массивов со значениями остальных колонок, где ключами нижнего массива будут имена колонок (пример)
  • multi# | #:#: - возвратит 2-мерный массив, где для 1D: ключи - автоинкрементны; 2D: ключи - автоинкрементны, значения соответствует полям колонок результата (пример)
  • multi@ | @:#: - возвратит 2-мерный массив, где для 1D: ключи - имена колонок; 2D: ключи - автоинкрементны, значения соответствует полям колонок результата (пример)
  • #multi# | #:$: - возвратит 2-мерный массив, где для 1D: ключи - автоинкрементны; 2D: ключи - значения первой колонки результата, значения соответствует полям колонок результата (пример)
  • #multi@ | @:$: - возвратит 3-мерный массив, где для 1D: ключи - имена колонок; 2D: ключи - значения первой колонки результата; 3D: ключи - автоинкрементны, значения соответствует полям колонок результата (пример)

##^ Варианты значений $type для запросов НЕ возвращающих результат запроса:

  • 0 - вернет кол-во измененных строк;
  • 1 - вернет ID последней вставленной записи.

##^ Примеры:

Для всех примеров используется таблица следующего вида:

> SHOW CREATE TABLE `tmp_tbl`;

CREATE TABLE `tmp_tbl` (
`col_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`col_char` char(5) NOT NULL,
`col_date` date NOT NULL,
`col_text` text,
PRIMARY KEY (`col_id`),
KEY `col_date` (`col_date`)
) ENGINE=MyISAM CHARSET=utf8 COMMENT='test table'

> SELECT * FROM `tmp_tbl`;

+--------+----------+------------+---------------------+
| col_id | col_char | col_date   | col_text            |
+--------+----------+------------+---------------------+
|      1 | aaaaa    | 2016-09-12 | some text           |
|      2 | bbbbb    | 2016-09-11 | NULL                |
|      3 | ccccc    | 2016-09-10 | NULL                |
|      4 | ddddd    | 2016-09-12 | not null, same date |
+--------+----------+------------+---------------------+

### Пример 1, type=one

SELECT `col_char`
FROM `tmp_tbl`
WHERE `col_id` = !
print_r(query($sql,[1],"one"));

aaaaa

### Пример 2, type=#

SELECT *
FROM `tmp_tbl`
WHERE `col_id` = !
print_r(query($sql,[1],"#"));

Array
(
    [0] => 1
    [1] => aaaaa
    [2] => 2016-09-12
    [3] => some text
)

### Пример 3, type=#:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,null,"#:"));

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

### Пример 4, type=@

SELECT *
FROM `tmp_tbl`
WHERE `col_id` = !
print_r(query($sql,[2],"@"));

Array
(
    [col_id] => 2
    [col_char] => bbbbb
    [col_date] => 2016-09-11
    [col_text] =>
)

### Пример 5, type=#:#

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"#:#"));

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => aaaaa
            [2] => 2016-09-12
            [3] => some text
        )
    [1] => Array
        (
            [0] => 2
            [1] => bbbbb
            [2] => 2016-09-11
            [3] =>
        )
    [2] => Array
        (
            [0] => 3
            [1] => ccccc
            [2] => 2016-09-10
            [3] =>
        )
    [3] => Array
        (
            [0] => 4
            [1] => ddddd
            [2] => 2016-09-12
            [3] => not null, same date
        )
)

### Пример 6, type=#:@

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"#:@"));

Array
(
    [0] => Array
        (
            [col_id] => 1
            [col_char] => aaaaa
            [col_date] => 2016-09-12
            [col_text] => some text
        )
    [1] => Array
        (
            [col_id] => 2
            [col_char] => bbbbb
            [col_date] => 2016-09-11
            [col_text] =>
        )
    [2] => Array
        (
            [col_id] => 3
            [col_char] => ccccc
            [col_date] => 2016-09-10
            [col_text] =>
        )
    [3] => Array
        (
            [col_id] => 4
            [col_char] => ddddd
            [col_date] => 2016-09-12
            [col_text] => not null, same date
        )
)

### Пример 7, type=$:#

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"$:#"));

Array
(
    [1] => Array
        (
            [0] => aaaaa
            [1] => 2016-09-12
            [2] => some text
        )
    [2] => Array
        (
            [0] => bbbbb
            [1] => 2016-09-11
            [2] =>
        )
    [3] => Array
        (
            [0] => ccccc
            [1] => 2016-09-10
            [2] =>
        )
    [4] => Array
        (
            [0] => ddddd
            [1] => 2016-09-12
            [2] => not null, same date
        )
)

### Пример 8, type=$:@

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"$:@"));

Array
(
    [1] => Array
        (
            [col_char] => aaaaa
            [col_date] => 2016-09-12
            [col_text] => some text
        )
    [2] => Array
        (
            [col_char] => bbbbb
            [col_date] => 2016-09-11
            [col_text] =>
        )
    [3] => Array
        (
            [col_char] => ccccc
            [col_date] => 2016-09-10
            [col_text] =>
        )
    [4] => Array
        (
            [col_char] => ddddd
            [col_date] => 2016-09-12
            [col_text] => not null, same date
        )
)

### Пример 9, type=$:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"$:"));

Array
(
    [1] => aaaaa
    [2] => bbbbb
    [3] => ccccc
    [4] => ddddd
)

### Пример 10, type=$:##

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"$:##"));

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [0] => aaaaa
                    [1] => 2016-09-12
                    [2] => some text
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => bbbbb
                    [1] => 2016-09-11
                    [2] =>
                )
        )
    [3] => Array
        (
            [0] => Array
                (
                    [0] => ccccc
                    [1] => 2016-09-10
                    [2] =>
                )
        )
    [4] => Array
        (
            [0] => Array
                (
                    [0] => ddddd
                    [1] => 2016-09-12
                    [2] => not null, same date
                )
        )
)

### Пример 11, type=$:#@

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"$:#@"));

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [col_char] => aaaaa
                    [col_date] => 2016-09-12
                    [col_text] => some text
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [col_char] => bbbbb
                    [col_date] => 2016-09-11
                    [col_text] =>
                )
        )
    [3] => Array
        (
            [0] => Array
                (
                    [col_char] => ccccc
                    [col_date] => 2016-09-10
                    [col_text] =>
                )
        )
    [4] => Array
        (
            [0] => Array
                (
                    [col_char] => ddddd
                    [col_date] => 2016-09-12
                    [col_text] => not null, same date
                )
        )
)

### Пример 12, type=$:#~

SELECT `col_date`,`col_id`
FROM `tmp_tbl`
print_r(query($sql,[],"$:#?"));

Array
(
    [2016-09-12] => Array
        (
            [0] => 1
            [1] => 4
        )
    [2016-09-11] => Array
        (
            [0] => 2
        )
    [2016-09-10] => Array
        (
            [0] => 3
        )
)

### Пример 13, type=#:#:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"#:#:"));

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )
    [1] => Array
        (
            [0] => aaaaa
            [1] => bbbbb
            [2] => ccccc
            [3] => ddddd
        )
    [2] => Array
        (
            [0] => 2016-09-12
            [1] => 2016-09-11
            [2] => 2016-09-10
            [3] => 2016-09-12
        )
    [3] => Array
        (
            [0] => some text
            [1] =>
            [2] =>
            [3] => not null, same date
        )
)

### Пример 14, type=@:#:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"@:#:"));

Array
(
    [col_id] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )
    [col_char] => Array
        (
            [0] => aaaaa
            [1] => bbbbb
            [2] => ccccc
            [3] => ddddd
        )
    [col_date] => Array
        (
            [0] => 2016-09-12
            [1] => 2016-09-11
            [2] => 2016-09-10
            [3] => 2016-09-12
        )
    [col_text] => Array
        (
            [0] => some text
            [1] =>
            [2] =>
            [3] => not null, same date
        )
)

### Пример 15, type=#:$:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"#:$:"));

Array
(
    [0] => Array
        (
            [1] => aaaaa
            [2] => bbbbb
            [3] => ccccc
            [4] => ddddd
        )
    [1] => Array
        (
            [1] => 2016-09-12
            [2] => 2016-09-11
            [3] => 2016-09-10
            [4] => 2016-09-12
        )
    [2] => Array
        (
            [1] => some text
            [4] => not null, same date
        )
)

### Пример 16, type=@:$:

SELECT *
FROM `tmp_tbl`
print_r(query($sql,[],"@:$:"));

Array
(
    [col_char] => Array
        (
            [1] => aaaaa
            [2] => bbbbb
            [3] => ccccc
            [4] => ddddd
        )
    [col_date] => Array
        (
            [1] => 2016-09-12
            [2] => 2016-09-11
            [3] => 2016-09-10
            [4] => 2016-09-12
        )
    [col_text] => Array
        (
            [1] => some text
            [4] => not null, same date
        )
)

### Пример 17, Символ подстановки {}

 $sql = 'INSERT
 `tmp_tbl`
 (`col_char`,`col_date`,`col_text`)
 VALUES
 {@,?,@}';
print_r(query($sql, [['a','b','c','d'], '2010-10-10',
['something','something else',null,'something new']], 'sql'));

 INSERT
 `tmp_tbl`
 (`col_char`,`col_date`,`col_text`)
 VALUES
 ( 'a','2010-10-10','something' ),( 'b','2010-10-10','something else' ),
( 'c','2010-10-10','' ),( 'd','2010-10-10','something new' )

##^ TODO:

  • separate branch with version that can be used without CodeIgniter framework
  • translated docs
  • updated docs

About

A CodeIgniter-based SQL helper that allows to make smart and easy replacements in queries and retrieve resulting resource in several formats on the fly

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages