Database

Class with functions for working with the database – DB – defined in the file includes/database.php.

All functions are static and can be called from any file in the format: DB::function_name().

Example:

For example, to make a request to the table diafan_users and get out all the fields with the users of the same type, it is necessary to do so:

$result = DB::query("SELECT fio FROM diafan_users WHERE role_id=%d", $role_id);

Pointing to the table, you can not write the prefix diafan_ and write {users}.

$result = DB::query("SELECT fio FROM {users} WHERE role_id=%d", $role_id);

Notice in the example we did not write WHERE role_id=$role_id and write WHERE role_id=%d. This is a safety feature so that you can easily make requests to external variables of type $_GET["role_id"].

To filter SQL-query arguments instead mask data transmitted and data is transmitted as an additional argument for the functions DB::query(), DB::query_result() and DB::query_range() in the order in which they appear in the SQL-query. The following masks:

  • %d – number,
  • %s – string,
  • %h – string without HTML-code,
  • %% – symbol %,
  • %f – discrete number,
  • %b – file

The table name is written without a prefix in braces.

Example:

{attachments}

Transferable variables in SQL-query are written in brackets.

Example:

[name]

To test, properly formed SQL-query and what data are substituted into it, the request can be displayed. To do this, you need to write a query DEV and enable development mode.

Example:

$text = DB::query_result("DEV SELECT [text] FROM {shop_category} WHERE id=%d", $cat_id);

Методы

boolean connect ([string $db_url = DB_URL], [boolean $check = false]) – Подключается к базе данных.

  • string $db_url: данные для подключения к базе данных
  • boolean $check: проверка соединения
The database connection is created automatically when send the first SQL-query. The data connection is taken from the constant DB_URL, defined in the file config.php.

void close () – Закрывает ранее открытое соединение.

Example:

// close opened connection
DB::close();

// connect to othe database and query users list
DB::connect("mysql://root:@localhost/otherdb");
$users = DB::query_fetch_all("SELECT id, fio FROM otherdb_users");

// close new connection
DB::close();

// return the old connection
DB::connect(DB_URL);

boolean set_charset (string $charset) – Задает набор символов по умолчанию.

  • string $charset: набор символов, который необходимо установить.

Example:

DB::set_charset('utf8');

mixed query (string $query) – Отправляет запрос к базе данных.

  • string $query: текст запроса

Example:

// insert data to table diafan_clauses
DB::query("INSERT INTO {clauses} ([name], [act], created) VALUES ('%h', '%d', %d)", $_POST["name"], $_POST["act"], time());

mixed query_without_prefix (string $query) – Отправляет запрос к базе данных без замены префикса.

  • string $query: текст запроса

Example:

// used for database import to SQL-query not converted
DB::query_without_prefix("INSERT INTO diafan_config (name, module_name, value) VALUES ('images_variations_element', 'news', 'a:2:{i:0;a:2:{s:4:\"name\";s:6:\"medium\";s:2:\"id\";i:1;}i:1;a:2:{s:4:\"name\";s:5:\"large\";s:2:\"id\";i:3;}}')");

resource query_range (string $query) – Отправляет запрос к базе данных с лимитом на количество получаемых в результате рядов.

  • string $query: текст запроса

Preferably, use function query_range_fetch_all().

Example:

// query name of three product images
$result = DB::query_range("SELECT name FROM {image} WHERE module_name='shop' AND element_id=%d AND element_type='element'", 5, 0, 3);

Such requests can often be found in the files *.model.php, where data filtering for lists, as well as modules that support pagination.

Example:

// query files in album ID=5 for list
// in the file modules/photo/photo.model.php
$result = DB::query_range("SELECT * FROM {photo} WHERE cat_id=5 ORDER BY sort DESC", $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr);

$this->diafan->_paginator->polog, $this->diafan->_paginator->nastr in this case act as the initial and final sample index.

mixed result (resource $result, [integer $row = 0]) – Получает результирующие данные.

  • resource $result: обрабатываемый результат запроса
  • integer $row: номер получаемого ряда из результата

Example:

// send SQL-query to database
$result = DB::query("SELECT id FROM {users} WHERE name='admin' LIMIT 1");
// get result
$id = DB::result($result);

void free_result (resource $result) – Освобождает память от результата запроса.

  • resource $result: обрабатываемый результат запроса

Example:

// send SQL-queryto database
$result = DB::query("SELECT id FROM {users} WHERE name='admin' LIMIT 1");

// get result
$id = DB::result($result);

// free result
DB::free_result($result);

In the example of three operations can be replaced by call function query_result().

Example:

$id = DB::query_result("SELECT id FROM {users} WHERE name='admin' LIMIT 1");

There are similar functions to produce an array of data from one or more strings. Therefore, functions result() and free_result() is outside class DB not used.

array fetch_row (resource $result) – Извлекает результирующий ряд как пронумерованный массив.

  • resource $result: обрабатываемый результат запроса

Example:

// query the database and display the list of goods
$result = DB::query("SELECT id, [name] FROM {shop}");
echo
'Products: ';
while (
$row = DB::fetch_row($result))
{
    echo
'ID: '.$row[0].' name: '.$row[1]."\n";
}
DB::free_result($result);

array fetch_array (resource $result) – Извлекает результирующий ряд как массив.

  • resource $result: обрабатываемый результат запроса

Preferably, use function query_fetch_array() and similar.

Example:

// query the database and display the list of devilery methods
$result = DB::query("SELECT [name] FROM {shop_delivery} ORDER BY sort ASC");
echo
'Delivery methods:';
while (
$row = DB::fetch_array($result))
{
    echo
$row["name"] . <br>;
}
DB::free_result($result);

object fetch_object (resource $result) – Извлекает результирующий ряд как объект.

  • resource $result: обрабатываемый результат запроса

Example:

// query the database and display list of news
$result = DB::query("SELECT [name], [anons] FROM {news} ORDER BY created DESC");
echo
'News:';
while (
$row = DB::fetch_object($result))
{
    echo
'Title: '$row->name.' anons: '.$row->anons;
}
DB::free_result($result);

integer num_rows (resource $result) – Получает количество рядов в результате.

  • resource $result: обрабатываемый результат запроса

Example:

// display the number of news older than the current date
$result = DB::query("SELECT id FROM {news} WHERE created>%d", time());
echo
DB::num_rows($result);
DB::free_result($result);

integer insert_id () – Возвращает автоматически генерируемый ID, используя последний запрос.

Example:

// determine the ID of the newly added user
DB::query("INSERT INTO {users} (name) VALUES ('admin')");
$user_id = DB::insert_id();

// shorthand
$user_id = DB::query("INSERT INTO {users} (name) VALUES ('admin')");

integer affected_rows () – Возвращает число затронутых прошлой операцией рядов.

mixed query_result () – Получает результирующие данные из SQL-запроса.

Example:

// obtain description of the current category from the database
$text = DB::query_result("SELECT [text] FROM {shop_category} WHERE id=%d", $this->diafan->cat);

mixed query_fetch_array () – Получает результирующий ряд как массив из SQL-запроса.

Example:

// inquire into the user database ID = 4
$user = DB::query_fetch_array("SELECT * FROM {users} WHERE id=4");
echo
'Name: '.$user["fio"];
echo
'Username: '.$user["name"];
echo
'E-mail: '.$user["mail"];

array query_fetch_all () – Получает массив результирующих рядов из SQL-запроса.

Example:

// query the database for all user data
$users = DB::query_fetch_all("SELECT * FROM {users}");
foreach(
$users as $user)
{
    echo
'Name: '.$user["fio"];
    echo
'Username: '.$user["name"];
    echo
'E-mail: '.$user["mail"];
}

array query_range_fetch_all (string $query) – Отправляет запрос к базе данных с лимитом на количество получаюмых в результате рядов и получает массив результирующих рядов.

  • string $query: текст запроса

Example:

// query the database for 3 news, starting with the 10th, not older than the current date
$rows = DB::query_range_fetch_all("SELECT id, [name], [anons] FROM {news} WHERE created<%d", time(), 10, 3);
foreach(
$rows as $row)
{
    echo
'ID: '.$row["id"];
    echo
'Title: '.$row["name"];
    echo
'Anons: '.$row["anons"];
}

array query_fetch_key (string $query)

Отправляет запрос к базе данных и получает массив результирующих рядов, в котором ключами являются значения одного из полей, название которого переданно последним агрументом.

.

  • string $query: текст запроса

Example:

// query the database for news not older than the current date
// results are obtained in the form of an array, which will be key ID news
$rows = DB::query_fetch_key("SELECT id, [name], [anons] FROM {news} WHERE created<%d", time(), "id");

echo
'News ID=4:';
    echo
'Title: '.$rows[4]["name"];
    echo
'Anons: '.$rows[4]["anons"];

echo
'News ID=19:';
    echo
'Name: '.$rows[19]["name"];
    echo
'Anons: '.$rows[19]["anons"];

array query_fetch_key_array (string $query) – Отправляет запрос к базе данных и получает массив, в котором ключами являются значения одного из полей, название которого переданно последним агрументом, а значениями массив результирующих рядов, соответствующих ключу..

  • string $query: текст запроса

Example:

// query comments the last 10 days
// grouped by comment-parent
$comments = DB::query_fetch_key_array("SELECT * FROM {comments} WHERE created>%d", time() - 864000, "parent_id");
// comments of first level
forearch($comments[0] as $row)
{
    echo
$row["text"];
    
// nested comments of second level
    
if(! empty($comments[$row["id"]]))
    {
        foreach(
$comments[$row["id"]] as $r)
        {
            echo
$r["text"];
        }
    }
}

array query_fetch_key_value (string $query) – Отправляет запрос к базе данных и получает массив, в котором ключами являются значения одного из полей, название которого переданно предпоследним агрументом, а значениеями значения другого поля, название которого передано последним агрументом..

  • string $query: текст запроса

Example:

// obtain the category of products in the form of an array,
// where the keys are the category ID and name values
$cats = DB::query_fetch_key_value("SELECT id, [name] FROM {shop_category} WHERE act='%d'", 1, "id", "name");
echo
'Category title ID=3: '.$cats[3];
echo
'Category title ID=5: '.$cats[5];

array query_fetch_value (string $query) – Отправляет запрос к базе данных и получает массив значений поля, название которого передано последним агрументом..

  • string $query: текст запроса

Example:

// obtain an array of active user IDs
$user_ids = DB::query_fetch_value("SELECT id FROM {users} WHERE act='%d'", 1, "id");
print_r($user_ids);
/* output:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
) */

mixed query_fetch_object () – Получает результирующий ряд как массив из SQL-запроса.

Example:

// query the user ID = 4
$user = DB::query_fetch_object("SELECT * FROM {users} WHERE id=4");
echo
'Name: '.$user->fio;
echo
'Username: '.$user->name;
echo
'E-mail: '.$user->mail;

string escape_string (string $str) – Мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов/charset соединения.

  • string $str: исходная строка

Example:

// prepare data received from the user
// for secure use directly are SQL-query
$search = DB::escape_string($_GET["searchword"]);
DB::query("INSERT INTO {search_history} (created, name) VALUES (".time().", '".$search."')");