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();