- Модуль: 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);
}