public function insert(Entity $entity) { $tag = "EntityDAO: insert()"; Log::notice("{$tag}"); $blueprint = $this->blueprint; $timezone_offset = $this->timezone_offset_modify; $query = "INSERT INTO " . $this->tableName() . " SET "; if ($entity->getId() != 0) { $query .= "id=" . $entity->getId() . ", "; } foreach ($blueprint->fields() as $field) { $key = $field->getKey(); $value = $entity->get($key); $encType = $field->getEncType(); if (!empty($value) || $value == "0") { if (!empty($encType) && $encType != "plain") { $value = hash($encType, $value); Log::debug("{$tag}: Encrypted value for {$key}: {$value}"); } switch ($field->getDataType()) { case "int": $query .= "{$key}={$value}"; break; case "decimal": case "date": $query .= "{$key}='{$value}'"; break; case "datetime": case "time": $query .= "{$key}=CONVERT_TZ('{$value}', '{$timezone_offset}', '" . BPTimezone::UTC . "')"; break; case "enum": $query .= "{$key}='{$value}'"; break; case "string": case "text": case "binary": $value = DatabaseSanitizer::sanitize($value); $query .= "{$key}='{$value}'"; break; } } else { $query .= "{$key}=NULL"; } $query .= ", "; } $query = substr($query, 0, strlen($query) - 2); // remove trailing comma and space (", ") $sql = new DatabaseUpdate($query, "insert"); try { $sql->doUpdate(); return $sql->last_insert_id(); } catch (Exception $e) { Log::error("{$tag}: [" . $sql->err_code . "] " . $sql->err_message); throw $e; } }