code: public function insert($table, $columns, &$params)
      {
          list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
          return 'INSERT INTO ' . $this->db->quoteTableName($table)
              . (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
              . (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
      }
docs: Creates an INSERT SQL statement.
  For example,
  ```php
  $sql = $queryBuilder->insert('user', [
  'name' => 'Sam',
  'age' => 30,
  ], $params);
  ```
  The method will properly escape the table and column names.
  
  @param string $table the table that new rows will be inserted into.
  @param array|Query $columns the column data (name => value) to be inserted into the table or instance
  of [[yii\db\Query|Query]] to perform INSERT INTO ... SELECT SQL statement.
  Passing of [[yii\db\Query|Query]] is available since version 2.0.11.
  @param array $params the binding parameters that will be generated by this method.
  They should be bound to the DB command later.
  @return string the INSERT SQL