Class it_dbi:

/**
 * Insert a record into table. Values are taken assoc array $tags. Keys in $tags
 * should contain row names unless "dyncols" exists in schema (they are stored as
 * dynamic columns then). Keys with - prefix suppress quoting of values.
 * After inserting, all values are valid (record is read back).
 * Does not destroy internal state of last select() call
 * @param $tags key => value pairs to set
 * @return true for success, false for failure (e.g. duplicate entry for key)
 */
function insert($tags = array(), $command "INSERT")
{
    
$this->_connect();

    
/* Pre-processing, $tags is passed by reference and may be modified here */
    
$tags = static::_write_preprocess($tags);

    if (
$this->_p['randomid'] && !isset($tags[$this->_p['keyfield']]))
        
$tags[$this->_p['keyfield']] = bin2hex(random_bytes(16));

    
$values $this->_values($tags"insert");

    if (
$result $this->query($query "$command INTO {$this->_p['table']} " $values))
    {
        
$id = ($this->_p['autoincrement'] && !isset($tags[$this->_p['keyfield']])) ? $this->_insertid $tags[$this->_p['keyfield']];
        if (
$this->_p['keyfield'] && !$this->read($id) && $this->_p['safety'])
            
$this->_fatal("insert(): can't read record back (key truncated?), id=\"$id\""$query);

        
$this->_touchedids[$this->_key] = true;
    }
    else
        
$this->clear();

    return 
$result;
}