Zend Basic Tutorial
Zend Forms
Zend Database
Zend Advanced
SQL Abstraction is a programming approach that allows developers to build SQL queries using PHP objects, instead of writing raw SQL strings manually.
Laminas provides the Laminas\Db\Sql
component to abstract SQL queries in a safe, readable, and database-independent way.
Raw SQL:
SELECT * FROM users WHERE id = 1;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from('users') ->where(['id' => 1]); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT * FROM users WHERE age > 18 AND (status = 'active' OR NOT verified);
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from('users'); $select->where ->greaterThan('age', 18) ->AND ->nest() ->equalTo('status', 'active') ->or->literal('NOT verified') ->unnest(); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
INSERT INTO users (name, email) VALUES ('John', 'john@example.com');
Laminas Db:
$sql = new Sql($this->dbAdapter); $insert = $sql->insert('users'); $insert->values([ 'name' => 'John', 'email' => 'john@example.com', ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute();
Raw SQL:
UPDATE users SET name = 'Johnny' WHERE id = 5;
Laminas Db:
$sql = new Sql($this->dbAdapter); $update = $sql->update('users'); $update->set(['name' => 'Johnny']) ->where(['id' => 5]); $statement = $sql->prepareStatementForSqlObject($update); $result = $statement->execute();
Raw SQL:
DELETE FROM users WHERE id = 5;
Laminas Db:
$sql = new Sql($this->dbAdapter); $delete = $sql->delete('users'); $delete->where(['id' => 5]); $statement = $sql->prepareStatementForSqlObject($delete); $result = $statement->execute();
Raw SQL:
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from(['u' => 'users']) ->columns(['name']) ->join(['o' => 'orders'], 'u.id = o.user_id', ['total'], $select::JOIN_INNER); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from(['u' => 'users']) ->columns(['name']) ->join(['o' => 'orders'], 'u.id = o.user_id', ['total'], $select::JOIN_LEFT); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT u.name, o.total FROM users u RIGHT JOIN orders o ON u.id = o.user_id;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from(['u' => 'users']) ->columns(['name']) ->join(['o' => 'orders'], 'u.id = o.user_id', ['total'], $select::JOIN_RIGHT); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT status, COUNT(*) as total FROM users GROUP BY status HAVING total > 5;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from('users') ->columns(['status', 'total' => new Expression('COUNT(*)')]) ->group('status') ->having(['total > ?' => 5]); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT * FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 20;
Laminas Db:
$sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from('users') ->order('created_at DESC') ->limit(10) ->offset(20); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
Raw SQL:
SELECT COUNT(*) AS total FROM users;
Laminas Db:
use Laminas\Db\Sql\Expression; $sql = new Sql($this->dbAdapter); $select = $sql->select(); $select->from('users'); $select->columns([ 'total' => new Expression('COUNT(*)') ]); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute();
$statement = $adapter->createStatement('SELECT * FROM users WHERE email LIKE ?', ['%gmail.com']); $result = $statement->execute();