Документация для разработчиков

Query

mixed
CDatabase::Query(
 string sql,
 bool ignore_errors=false,
 string error_position="",
 array Options=array() 
)

Метод выполняет запрос к базе данных и если не произошло ошибки возвращает результат. В случае успешного выполнения метод возвращает объект класса CDBResult.
Если произошла ошибка и параметр ignore_errors равен "true", то метод вернет "false".
Если произошла ошибка и параметр ignore_errors равен "false", то метод прерывает выполнение страницы, выполняя перед этим следующие действия:

  1. Вызов функции AddMessage2Log.
  2. Если текущий пользователь является администратором сайта, либо в файле /bitrix/php_interface/dbconn.php была инициализирована переменная $DBDebug=true;, то на экран будет выведен полный текст ошибки, в противном случае будет вызвана функция SendError.
  3. Будет подключен файл /bitrix/php_interface/dbquery_error.php, если он не существует, то будет подключен файл /bitrix/modules/main/include/dbquery_error.php

Примечания для Oracle версии:
1. При возникновении ошибки, если была открыта транзакция, то выполняется CDataBase::Rollback.
2. Для вставки текстовых полей типа BLOB, CLOB, LONG и т.п. (длинною больше 4000 символов), воспользуйтесь методом CDatabase::QueryBind.
3. Если при выполнении SQL-запроса типа "SELECT" требуется связывание переменных, то воспользуйтесь методом CDatabase::QueryBindSelect.

Нестатический метод.

Аналог метода в новом ядре D7 - Bitrix\Main\DB\Connection::query .

Параметры

ПараметрОписание С версии
sql SQL запрос.
ignore_errors Игнорировать ошибки. Если true, то в случае ошибки функция возвращает "false". Если параметр ignore_errors равен "false", то в случае ошибки функция прекращает выполнение всей страницы.
Необязательный. По умолчанию - "false".
error_position Строка идентифицирующая позицию в коде, откуда была вызвана данная функция CDatabase::Query. Если в SQL запросе будет ошибка и если в файле /bitrix/php_interface/dbconn.php установлена переменная $DBDebug=true;, то на экране будет выведена данная информация и сам SQL запрос. Необязательный.
Options Необязательный.9.5.10

См. также

Примеры использования

<?
function GetByID($ID, $GET_BY_SID="N")
{
	$err_mess = (CForm::err_mess())."<br>Function: GetByID<br>Line: ";
	global $DB;
	$where = ($GET_BY_SID=="N") ? " F.ID = '".intval($ID)."' " : " F.VARNAME='".$DB->ForSql($ID,50)."' ";
	$strSql = "
		SELECT
			F.*,
			F.FIRST_SITE_ID,
			F.FIRST_SITE_ID									LID,
			F.VARNAME,
			F.VARNAME										SID,
			".$DB->DateToCharFunction("F.TIMESTAMP_X")."	TIMESTAMP_X,
			count(distinct D1.ID)							C_FIELDS,
			count(distinct D2.ID)							QUESTIONS,
			count(distinct S.ID)							STATUSES
		FROM b_form F
		LEFT JOIN b_form_status S ON (S.FORM_ID = F.ID)
		LEFT JOIN b_form_field D1 ON (D1.FORM_ID = F.ID and D1.ADDITIONAL='Y')
		LEFT JOIN b_form_field D2 ON (D2.FORM_ID = F.ID and D2.ADDITIONAL<>'Y')
		WHERE 
			$where
		GROUP BY 
			F.ID
		";
	$res = $DB->Query($strSql, false, $err_mess.__LINE__);
	return $res;
}
?>


Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
12
elar
Данный пример говоря программистским языком не совсем рабочий.

Класс 'CForm' не найден, может для этого надо как-то дополнительно объявлять объект. Запрос выдает ошибку т.к. в базе нет определенных полей (что может возникнуть у многих пользователей).

Поэтому данный код к сожалению является не лучшим примером, особенно для тех кто имеет не особо сильный опыт в программировании под битрикс.

Проще использовать вот такой вариант:

Код
$results = $DB->Query("SEL ECT distinct `NAME` FR OM `b_iblock_section` WHERE `IBLOCK_ID`='8'");
//выполняем произвольный запрос

$name_array=array();
//создаем пустой массив, но можно эту строчку исключить

while ($row = $results->Fetch())
{
echo $row['NAME'];//выводим все значения, которые вернул запрос
array_push($name_array, $row);//если исключили создание массива, то исключите и эту строку, тут мы создаем массив со всеми значениями которые вернул запрос, чтобы потом этот массив использовать в любых целях.
}

print_r($name_array);//если исключили создание массива, то исключите и эту строку, а здесь мы отображаем полученный массив.


Преимущество этого кода, в том, что он будет выполнятся абсолютно на любой странице сайта и он очень простой.
© «Битрикс», 2001-2018, «1С-Битрикс», 2018
Наверх