$value) { // - получаю ключ 100%-но без ":" в начале $set_key = $key[0] == ":" ? substr($key, 1) : $key; // - добавляю префикс для 2 или более итерации $prefix = $sql_set == "" ? "" : ", "; // - добавляю данные в sql_set $sql_set .= "$prefix$this->DBSignOpen$set_key$this->DBSignClose=:$set_key"; // - добавляю данные в параметры $params_set[":" . $set_key] = $value; } // Обработанные параметры $params_where = []; // Строковая интерпретация массива условий $sql_where = $this->PrepareQueryWhere(where: $where, params: $params_where); // Создаю параметры $params = array_merge($params_set, $params_where); // Создаю запрос $sql = "UPDATE $this->DBSignOpen$table$this->DBSignClose SET $sql_set"; // Если заданы where-параметры if (count($where) > 0) // - то добавляю их $sql .= " WHERE $sql_where"; // Выполняю запрос $count = $this->Execute($sql, $params); // Если результат - false if ($count === false) // - то и общий результат - false return false; // Если изменено 0 строк if ($count === 0) // - то и общий результат - false return false; // Вывожу результат -- успех return true; } public function Update (string $table, IDBItem $item): bool { $primaryKeys = $this->FindPrimaryKeys($item, DBOperation::Update); $pk_keys = array_keys($primaryKeys); $where = new ConditionBuilder(); for ($i = 0; $i < count($primaryKeys); $i++) { if ($i > 0) $where = $where->And(); $whereKey = $pk_keys[$i]; $whereValue = $primaryKeys[$whereKey]; $where = $where->WhereEquals($whereKey, $whereValue); } $dbItem = $this->GetRow($table, $where, className: get_class($item)); // Создаю массив параметров $params_set = []; // Строковая интерпретация массива для изменения $sql_set = ""; // Для каждых данных для изменения foreach ($set as $key => $value) { // - получаю ключ 100%-но без ":" в начале $set_key = $key[0] == ":" ? substr($key, 1) : $key; // - добавляю префикс для 2 или более итерации $prefix = $sql_set == "" ? "" : ", "; // - добавляю данные в sql_set $sql_set .= "$prefix$this->DBSignOpen$set_key$this->DBSignClose=:$set_key"; // - добавляю данные в параметры $params_set[":" . $set_key] = $value; } // Обработанные параметры $params_where = []; // Строковая интерпретация массива условий $sql_where = $this->PrepareQueryWhere(where: $where, params: $params_where); // Создаю параметры $params = array_merge($params_set, $params_where); // Создаю запрос $sql = "UPDATE $this->DBSignOpen$table$this->DBSignClose SET $sql_set"; // Если заданы where-параметры if (count($where) > 0) // - то добавляю их $sql .= " WHERE $sql_where"; // Выполняю запрос $count = $this->Execute($sql, $params); // Если результат - false if ($count === false) // - то и общий результат - false return false; // Если изменено 0 строк if ($count === 0) // - то и общий результат - false return false; // Вывожу результат -- успех return true; } }