ignore: array - игнорировать перечисленные поля. Когда массив пуст, то ничего * игнорироваться не будет. По умолчанию - пустой массив. * - allow: array - включать только перечисленные поля. Когда массив пуст, то все поля будут * включены. По умолчанию - пустой массив. * * @return string|false В случае успеха выведет: id созданной записи, -1, если запись создана, но id не получен * (глюк?) и false, если ошибка */ public function Insert (string $table, IDBItem $row, array $options = []): string|false { // Подготавливаю запрос [$sql, $params] = $this->PrepareInsertSQL($table, $row, $options); // Выполняю запрос $count = $this->Execute($sql, $params); // Если результат - false или добавлена не одна запись if (($count === false) || ($count < 1) || ($count > 1)) // - то и общий результат - false return false; $lastId = -1; try { // Получаю последний id этой записи $lastIdResult = $this->DataBaseHandle->lastInsertId(); // Если получение неудачное if ($lastIdResult === false) // - то вывожу -1 return $lastId; // Устанавливаю последний id $lastId = $lastIdResult; } catch (PDOException $e) { $this->HandleException($e); } // Вывожу последний id return $lastId; } /** * Вставляет несколько строк в базу данных. * * @param string $table Имя таблицы. * @param array $options Параметры. * @param IDBItem ...$sources Модели или классы, реализующие интерфейс IDBItem, для вставки. * * @return void */ public function InsertMany (string $table, array $options, IDBItem ...$sources): void { // Инициализирую транзакцию $this->InitTransaction(); try { // Для каждого источника foreach ($sources as $source) // - вставляю строку $this->Insert($table, $source, $options); // Если вставка успешна, то подтверждаю транзакцию $this->Commit(); } catch (Exception $exception) { // - если ошибка, то откатываю транзакцию $this->RollBack(); // - и вывожу ошибку $this->HandleException($exception); } } /** * Подготавливает запрос для вставки строки в базу данных. * * @param string $table Имя таблицы. * @param IDBItem $row Элемент. * @param array $options Параметры. * * @return Tuple Возвращает [запрос, параметры запроса]. */ private function PrepareInsertSQL (string $table, IDBItem $row, array $options = []): Tuple { // Подготавливаю массив параметров $params = $this->PrepareParamsArray(source: $row, options: $options); // Получаю ключи параметров $keys = array_keys($params); // Создаю результирующий массив имён ключей параметров $keysReal = []; // Для каждого ключа параметра foreach ($keys as $key) { // - получаю его имя $keyResult = $key[0] == ":" ? substr($key, 1) : $key; // - заключаю в кавычки $keyResult = "$this->DBSignOpen$keyResult$this->DBSignClose"; // - добавляю в результирующий массив ключей $keysReal[] = $keyResult; } // Ключи sql запроса $sql_keys = implode(', ', $keysReal); // Значения sql запроса $sql_values = implode(', ', $keys); // Создаю запрос $sql = "INSERT INTO $this->DBSignOpen$table$this->DBSignClose ($sql_keys) VALUES ($sql_values);"; // Возвращаю результат return new Tuple($sql, $params); } }