• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/db/dbconnectionpool.php
  • Класс: BitrixMainDBDbConnectionPool
  • Вызов: DbConnectionPool::getDbNodeConnection
static function getDbNodeConnection($nodeId, $checkStatus = true)
	{
		global $DB;

		if(!array_key_exists($nodeId, self::$arNodes))
		{
			if(CModule::includeModule('cluster'))
				self::$arNodes[$nodeId] = CClusterDBNode::getByID($nodeId);
			else
				self::$arNodes[$nodeId] = false;
		}
		$node = &self::$arNodes[$nodeId];

		if(
			is_array($node)
			&& (
				!$checkStatus
				|| (
					$node["ACTIVE"] == "Y"
					&& ($node["STATUS"] == "ONLINE" || $node["STATUS"] == "READY")
				)
			)
			&& !isset($node["ONHIT_ERROR"])
		)
		{
			if(!array_key_exists("DB", $node))
			{
				$node_DB = new CDatabase;
				$node_DB->type = $DB->type;
				$node_DB->debug = $DB->debug;
				$node_DB->DebugToFile = $DB->DebugToFile;
				$node_DB->bNodeConnection = true;
				if($node_DB->connect($node["DB_HOST"], $node["DB_NAME"], $node["DB_LOGIN"], $node["DB_PASSWORD"]))
				{
					if(defined("DELAY_DB_CONNECT") && DELAY_DB_CONNECT===true)
					{
						if($node_DB->doConnect())
							$node["DB"] = $node_DB;
					}
					else
					{
						$node["DB"] = $node_DB;
					}
				}
			}

			if(array_key_exists("DB", $node))
				return $node["DB"];
		}

		if($bIgnoreErrors)
		{
			return false;
		}
		else
		{
			if(file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/dbconn_error.php"))
				include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/dbconn_error.php");
			else
				include($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/dbconn_error.php");
			die();
		}
	}