Database layer class
Passwords as plain text!?
If I were using an application or website that stored my password as plain text where anyone with access to the DB seeing this would make me feel very scared:
// inserts into database
$query-&gt;insert('users')
        -&gt;columns('`username`,`password`')
        -&gt;values('&quot;test&quot;,&quot;tester&quot;')
        -&gt;execute();

For the love of your users, please consider password hashing!

Password hashing is one of the most basic security considerations that must be made when designing any application that accepts passwords from users. Without hashing, any passwords that are stored in your application's database can be stolen if the database is compromised, and then immediately used to compromise not only your application, but also the accounts of your users on other services, if they do not use unique passwords.

Redundancy
This:
public function insert($arg)
{
    $this-&gt;_sql .= &quot;INSERT INTO {$arg}&quot;;
    return $this;        
}

public function columns($arg)
{
    $this-&gt;_sql .= &quot; ({$arg})&quot;;
    return $this;            
}

public function values($arg)
{
    $this-&gt;_sql .= &quot; VALUES ({$arg})&quot;;
    return $this;            
}

And this:
// inserts into database
$query-&gt;insert('users')
        -&gt;columns('`username`,`password`')
        -&gt;values('&quot;test&quot;,&quot;tester&quot;')
        -&gt;execute();

That seems redundant, unless you plan on inserting user names and passwords in different tables/columns. Why not shorten it like this:
public function insert($arg)
{
    $this-&gt;_sql .= &quot;INSERT INTO users (`username`, `password`) VALUES ({$arg})&quot;;
    return $this;        
}