db_query_temporary
includes/database.mysql.inc, строка 276
- Версии
- 5 – 6
db_query_temporary($query)
Выполняет SELECT-запрос к активной базе данных и сохраняет результат во временной таблице.
Эту функцию следует использовать вместо db_query()
, когда результат запроса должен быть сохранён во временную таблицу. Временные таблицы существуют только во время запроса страницы.
Аргументы к запросу, подставленные пользователем, должны быть переданы как отдельные параметры — в этом случае они смогут быть правильно экранированы во избежании атак через SQL-инъекции.
Следует помнить, что при необходимости узнать количество возвращённых строк результата, необходимо выполнить запрос SELECT COUNT(*) из временной таблицы. db_affected_rows()
не даёт постоянного результата на разных типах баз данных в данной ситуации.
Примечание: использование этого синтаксиса приведет к тому, что NULL
и FALSE
будут превращаться в десятичный 0, а TRUE
— в десятичную 1.
Параметры
$query
Строка, содержащая SELECT SQL-запрос.
...
Переменное количество аргументов, которые подставляются в запрос по типу printf()
. Вместо переменного количества аргументов, можно использовать один массив, содержащий необходимые аргументы. Правильные шаблоны для подстановки: '%s'
, '%d'
, '%f'
, '%b'
(двоичные данные, не следует помещать в кавычки ''
) и '%%'
.
$table
Имя временной таблицы, в которую необходимо поместить результат. К имени таблицы префикс не добавляется, т.к. нет риска коллизии имён.
Возвращаемое значение
Результирующий ресурс запроса, или FALSE
, если запрос вызвал ошибку.
Связанные темы
Код
<?php
function db_query_temporary($query) {
$args = func_get_args();
$tablename = array_pop($args);
array_shift($args);
$query = preg_replace('/^SELECT/i', 'CREATE TEMPORARY TABLE '. $tablename .' Engine=HEAP SELECT', db_prefix_tables($query));
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
$args = $args[0];
}
_db_query_callback($args, TRUE);
$query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
return _db_query($query);
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии