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:
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]) – Подключается к базе данных.
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) – Задает набор символов по умолчанию.
Example:
DB::set_charset('utf8');
mixed 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) – Отправляет запрос к базе данных без замены префикса.
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) – Отправляет запрос к базе данных с лимитом на количество получаемых в результате рядов.
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]) – Получает результирующие данные.
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) – Освобождает память от результата запроса.
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) – Извлекает результирующий ряд как пронумерованный массив.
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) – Извлекает результирующий ряд как массив.
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) – Извлекает результирующий ряд как объект.
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) – Получает количество рядов в результате.
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) – Отправляет запрос к базе данных с лимитом на количество получаюмых в результате рядов и получает массив результирующих рядов.
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) –
Отправляет запрос к базе данных и получает массив результирующих рядов, в котором ключами являются значения одного из полей, название которого переданно последним агрументом.
.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) – Отправляет запрос к базе данных и получает массив, в котором ключами являются значения одного из полей, название которого переданно последним агрументом, а значениями массив результирующих рядов, соответствующих ключу..
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) – Отправляет запрос к базе данных и получает массив, в котором ключами являются значения одного из полей, название которого переданно предпоследним агрументом, а значениеями значения другого поля, название которого передано последним агрументом..
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) – Отправляет запрос к базе данных и получает массив значений поля, название которого передано последним агрументом..
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 соединения.
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."')");