- Модуль: search
- Путь к файлу: ~/bitrix/modules/search/classes/mysql/search.php
- Класс: CSearch
- Вызов: CSearch::RegisterStem
static function RegisterStem($stem)
{
$DB = CDatabase::GetModuleConnection('search');
static $cache = array();
if (is_array($stem)) //This is batch check of the already exist stems
{
ksort($stem);
$strSqlPrefix = "select * from b_search_stem where stem in (";
$maxValuesLen = 4096;
$maxValuesCnt = 1500;
$strSqlValues = "";
$i = 0;
foreach ($stem as $word => $count)
{
$strSqlValues .= ",'".$DB->ForSQL($word)."'";
$i++;
if (mb_strlen($strSqlValues) > $maxValuesLen || $i > $maxValuesCnt)
{
$rs = $DB->Query($strSqlPrefix.mb_substr($strSqlValues, 1).")", false, "File: ".__FILE__."
Line: ".__LINE__);
while ($ar = $rs->Fetch())
$cache[$ar["STEM"]] = $ar["ID"];
$strSqlValues = "";
$i = 0;
}
}
if ($strSqlValues <> '')
{
$rs = $DB->Query($strSqlPrefix.mb_substr($strSqlValues, 1).")", false, "File: ".__FILE__."
Line: ".__LINE__);
while ($ar = $rs->Fetch())
$cache[$ar["STEM"]] = $ar["ID"];
}
return;
}
if (!isset($cache[$stem]))
{
$rs = $DB->Query("insert into b_search_stem (STEM) values ('".$DB->ForSQL($stem)."')", true);
if ($rs === false)
{
$rs = $DB->Query("select ID from b_search_stem WHERE STEM = '".$DB->ForSQL($stem)."'");
$ar = $rs->Fetch();
$cache[$stem] = $ar["ID"];
}
else
{
$cache[$stem] = $DB->LastID();
}
}
return $cache[$stem];
}