• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/internals/sqlbatch.php
  • Класс: Bitrix\Sender\Internals\SqlBatch
  • Вызов: SqlBatch::insert
static function insert($tableName, array $fields, array $onDuplicateUpdateFields = array())
{
	$columnNames = self::getFieldNames($fields);
	if (count($columnNames) == 0)
	{
		return;
	}

	$columnNamesString = implode(", ", $columnNames);
	$dataListString =  implode('),(', self::getFieldValues($fields));

	$sql = "INSERT IGNORE $tableName($columnNamesString) VALUES($dataListString)";
	if (!empty($onDuplicateUpdateFields))
	{
		$sqlUpdateFields = array();
		foreach ($onDuplicateUpdateFields as $field)
		{
			if (is_array($field))
			{
				$fieldName = $field['NAME'];
				$fieldValue = $field['VALUE'];
			}
			else
			{
				$fieldName = $field;
				$fieldValue = "IFNULL(VALUES($fieldName), $fieldName)";
			}

			if (!in_array($fieldName, $columnNames))
			{
				continue;
			}

			$sqlUpdateFields[] = "$fieldName = $fieldValue";
		}

		if (count($sqlUpdateFields) > 0)
		{
			$sql .= " ON DUPLICATE KEY UPDATE " . implode(", ", $sqlUpdateFields);
		}
	}

	Application::getConnection()->query($sql);
}