PHPackages                             tomrf/seminorm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. tomrf/seminorm

ActiveLibrary[Database &amp; ORM](/categories/database)

tomrf/seminorm
==============

pdo sql query builder and executor

0.0.7(3y ago)1184MITPHPPHP ^8.0

Since May 11Pushed 3y ago1 watchersCompare

[ Source](https://github.com/tomrf/seminorm)[ Packagist](https://packagist.org/packages/tomrf/seminorm)[ Docs](http://github.com/tomrf/seminorm)[ RSS](/packages/tomrf-seminorm/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependencies (7)Versions (8)Used By (0)

seminorm - pdo sql query builder and executor
=============================================

[](#seminorm---pdo-sql-query-builder-and-executor)

[![PHP Version Require](https://camo.githubusercontent.com/35c9aaf33b7bc1ebf61dd2de96e4d7e1fad656c347f0ea07709ac2d98309cbc6/687474703a2f2f706f7365722e707567782e6f72672f746f6d72662f73656d696e6f726d2f726571756972652f7068703f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tomrf/seminorm) [![Latest Stable Version](https://camo.githubusercontent.com/fe7a253236b28d47e218cb7a59bbdd4a4ea15ef415a641b101c26bf07d668571/687474703a2f2f706f7365722e707567782e6f72672f746f6d72662f73656d696e6f726d2f763f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tomrf/seminorm) [![License](https://camo.githubusercontent.com/877f241d21b3ebbfccf5708141b984b63d1143a161522db40cba4e33f8919dab/687474703a2f2f706f7365722e707567782e6f72672f746f6d72662f73656d696e6f726d2f6c6963656e73653f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tomrf/seminorm)

PHP SQL query builder and executor, using PDO.

📔 [Go to documentation](#documentation)

Installation
------------

[](#installation)

Installation via composer:

```
composer require tomrf/seminorm
```

Usage
-----

[](#usage)

```
$db = new \Tomrf\Seminorm\Seminorm(
   new PdoConnection(
       PdoConnection::dsn(
           'mysql',
           'my_database',
           'localhost',
       ),
       'username',
       'password',
       []           // array of PDO options, ATTR_PERSISTENT, ATTR_ERRMODE etc..
   ),
   new Factory(QueryBuilder::class),
   new Factory(PdoQueryExecutor::class),
   null,            // optional row class, defaults to array
   null,            // optional data value class, defaults to string
);

$rows = $db->execute(
    'SELECT * FROM `my_table` WHERE id = :id',
    [ 'id' => 1 ]
)->findMany();

$rowId = $db->execute(
    $db->query()->insertInto(
       'my_table',
       [ 'name' => 'My Name', 'email' => 'mail@example.com' ]
    )
)->getLastInsertId();

...
```

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

This project is released under the MIT License (MIT). See [LICENSE](LICENSE) for more information.

Documentation
-------------

[](#documentation)

- [Tomrf\\Seminorm\\Seminorm](#-tomrfseminormseminormclass)
    - [\_\_construct](#__construct)
    - [getConnection](#getconnection)
    - [query](#query)
    - [execute](#execute)
    - [setLogger](#setlogger)
- [Tomrf\\Seminorm\\Data\\ImmutableArrayObject](#-tomrfseminormdataimmutablearrayobjectclass)
    - [\_\_get](#__get)
    - [\_\_isset](#__isset)
    - [offsetSet](#offsetset)
    - [offsetUnset](#offsetunset)
    - [offsetGet](#offsetget)
    - [offsetExists](#offsetexists)
    - [\_\_construct](#__construct)
    - [append](#append)
    - [getArrayCopy](#getarraycopy)
    - [count](#count)
    - [getFlags](#getflags)
    - [setFlags](#setflags)
    - [asort](#asort)
    - [ksort](#ksort)
    - [uasort](#uasort)
    - [uksort](#uksort)
    - [natsort](#natsort)
    - [natcasesort](#natcasesort)
    - [unserialize](#unserialize)
    - [serialize](#serialize)
    - [\_\_serialize](#__serialize)
    - [\_\_unserialize](#__unserialize)
    - [getIterator](#getiterator)
    - [exchangeArray](#exchangearray)
    - [setIteratorClass](#setiteratorclass)
    - [getIteratorClass](#getiteratorclass)
    - [\_\_debugInfo](#__debuginfo)
- [Tomrf\\Seminorm\\Data\\Row](#-tomrfseminormdatarowclass)
    - [toArray](#toarray)
    - [toJson](#tojson)
    - [\_\_get](#__get)
    - [\_\_isset](#__isset)
    - [offsetSet](#offsetset)
    - [offsetUnset](#offsetunset)
    - [offsetGet](#offsetget)
    - [offsetExists](#offsetexists)
    - [\_\_construct](#__construct)
    - [append](#append)
    - [getArrayCopy](#getarraycopy)
    - [count](#count)
    - [getFlags](#getflags)
    - [setFlags](#setflags)
    - [asort](#asort)
    - [ksort](#ksort)
    - [uasort](#uasort)
    - [uksort](#uksort)
    - [natsort](#natsort)
    - [natcasesort](#natcasesort)
    - [unserialize](#unserialize)
    - [serialize](#serialize)
    - [\_\_serialize](#__serialize)
    - [\_\_unserialize](#__unserialize)
    - [getIterator](#getiterator)
    - [exchangeArray](#exchangearray)
    - [setIteratorClass](#setiteratorclass)
    - [getIteratorClass](#getiteratorclass)
    - [\_\_debugInfo](#__debuginfo)
- [Tomrf\\Seminorm\\Data\\Value](#-tomrfseminormdatavalueclass)
    - [\_\_construct](#__construct)
    - [\_\_toString](#__tostring)
    - [asString](#asstring)
    - [asInt](#asint)
    - [asFloat](#asfloat)
    - [asBool](#asbool)
    - [isNumeric](#isnumeric)
    - [isInt](#isint)
    - [isString](#isstring)
    - [isBool](#isbool)
    - [isNull](#isnull)
    - [getType](#gettype)
- [Tomrf\\Seminorm\\Factory\\Factory](#-tomrfseminormfactoryfactoryclass)
    - [\_\_construct](#__construct)
    - [make](#make)
- [Tomrf\\Seminorm\\Pdo\\PdoConnection](#-tomrfseminormpdopdoconnectionclass)
    - [\_\_construct](#__construct)
    - [getPdo](#getpdo)
    - [getOptions](#getoptions)
    - [isConnected](#isconnected)
    - [getDsn](#getdsn)
    - [getUsername](#getusername)
    - [dsn](#dsn)
    - [connect](#connect)
    - [disconnect](#disconnect)
    - [\_\_debugInfo](#__debuginfo)
- [Tomrf\\Seminorm\\Pdo\\PdoQueryExecutor](#-tomrfseminormpdopdoqueryexecutorclass)
    - [\_\_construct](#__construct)
    - [getRowCount](#getrowcount)
    - [getLastInsertId](#getlastinsertid)
    - [execute](#execute)
    - [findOne](#findone)
    - [findMany](#findmany)
- [Tomrf\\Seminorm\\QueryBuilder\\QueryBuilder](#-tomrfseminormquerybuilderquerybuilderclass)
    - [\_\_toString](#__tostring)
    - [selectFrom](#selectfrom)
    - [insertInto](#insertinto)
    - [update](#update)
    - [deleteFrom](#deletefrom)
    - [set](#set)
    - [setRaw](#setraw)
    - [setFromArray](#setfromarray)
    - [alias](#alias)
    - [join](#join)
    - [limit](#limit)
    - [offset](#offset)
    - [onDuplicateKey](#onduplicatekey)
    - [getQuery](#getquery)
    - [getQueryParameters](#getqueryparameters)
    - [orderByAsc](#orderbyasc)
    - [orderByDesc](#orderbydesc)
    - [select](#select)
    - [selectAs](#selectas)
    - [selectRaw](#selectraw)
    - [selectRawAs](#selectrawas)
    - [where](#where)
    - [whereRaw](#whereraw)
    - [whereColumnRaw](#wherecolumnraw)
    - [whereEqual](#whereequal)
    - [whereNotEqual](#wherenotequal)
    - [whereNull](#wherenull)
    - [whereNotNull](#wherenotnull)
- [Tomrf\\Seminorm\\Sql\\SqlCompiler](#-tomrfseminormsqlsqlcompilerclass)
    - [getQuery](#getquery)
    - [getQueryParameters](#getqueryparameters)

### 📂 Tomrf\\Seminorm\\Seminorm::class

[](#-tomrfseminormseminormclass)

#### \_\_construct()

[](#__construct)

```
public function __construct(
    Tomrf\Seminorm\Pdo\PdoConnection $connection,
    Tomrf\Seminorm\Factory\Factory $queryBuilderFactory,
    Tomrf\Seminorm\Factory\Factory $queryExecutorFactory,
    ?string $rowClass = '',
    ?string $valueClass = ''
): void
```

#### getConnection()

[](#getconnection)

Return the active connection.

```
public function getConnection(): Tomrf\Seminorm\Pdo\PdoConnection
```

#### query()

[](#query)

```
public function query(): Tomrf\Seminorm\QueryBuilder\QueryBuilder
```

#### execute()

[](#execute)

```
public function execute(
    Tomrf\Seminorm\Interface\QueryBuilderInterface|string $query,
    array $parameters = []
): Tomrf\Seminorm\Pdo\PdoQueryExecutor

@param    array $parameters
```

#### setLogger()

[](#setlogger)

Sets a logger.

```
public function setLogger(
    Psr\Log\LoggerInterface $logger
): void

@param    \Tomrf\Seminorm\LoggerInterface $logger
```

---

### 📂 Tomrf\\Seminorm\\Data\\ImmutableArrayObject::class

[](#-tomrfseminormdataimmutablearrayobjectclass)

#### \_\_get()

[](#__get)

```
public function __get(
    string $name
): mixed
```

#### \_\_isset()

[](#__isset)

```
public function __isset(
    mixed $name
): void
```

#### offsetSet()

[](#offsetset)

```
public function offsetSet(
    mixed $key,
    mixed $value
): void

@SuppressWarnings (PHPMD.UnusedFormalParameter)
```

#### offsetUnset()

[](#offsetunset)

```
public function offsetUnset(
    mixed $key
): void

@SuppressWarnings (PHPMD.UnusedFormalParameter)
```

#### offsetGet()

[](#offsetget)

```
public function offsetGet(
    mixed $key
): mixed
```

#### offsetExists()

[](#offsetexists)

```
public function offsetExists(
    mixed $key
): bool
```

#### \_\_construct()

[](#__construct-1)

```
public function __construct(
    object|array $array = [],
    int $flags = 0,
    string $iteratorClass = 'ArrayIterator'
): void
```

#### append()

[](#append)

```
public function append(
    mixed $value
): void
```

#### getArrayCopy()

[](#getarraycopy)

```
public function getArrayCopy(): void
```

#### count()

[](#count)

```
public function count(): void
```

#### getFlags()

[](#getflags)

```
public function getFlags(): void
```

#### setFlags()

[](#setflags)

```
public function setFlags(
    int $flags
): void
```

#### asort()

[](#asort)

```
public function asort(
    int $flags = 0
): void
```

#### ksort()

[](#ksort)

```
public function ksort(
    int $flags = 0
): void
```

#### uasort()

[](#uasort)

```
public function uasort(
    callable $callback
): void
```

#### uksort()

[](#uksort)

```
public function uksort(
    callable $callback
): void
```

#### natsort()

[](#natsort)

```
public function natsort(): void
```

#### natcasesort()

[](#natcasesort)

```
public function natcasesort(): void
```

#### unserialize()

[](#unserialize)

```
public function unserialize(
    string $data
): void
```

#### serialize()

[](#serialize)

```
public function serialize(): void
```

#### \_\_serialize()

[](#__serialize)

```
public function __serialize(): void
```

#### \_\_unserialize()

[](#__unserialize)

```
public function __unserialize(
    array $data
): void
```

#### getIterator()

[](#getiterator)

```
public function getIterator(): void
```

#### exchangeArray()

[](#exchangearray)

```
public function exchangeArray(
    object|array $array
): void
```

#### setIteratorClass()

[](#setiteratorclass)

```
public function setIteratorClass(
    string $iteratorClass
): void
```

#### getIteratorClass()

[](#getiteratorclass)

```
public function getIteratorClass(): void
```

#### \_\_debugInfo()

[](#__debuginfo)

```
public function __debugInfo(): void
```

### 📂 Tomrf\\Seminorm\\Data\\Row::class

[](#-tomrfseminormdatarowclass)

#### toArray()

[](#toarray)

```
public function toArray(): array

@return   array
```

#### toJson()

[](#tojson)

```
public function toJson(): string
```

#### \_\_get()

[](#__get-1)

```
public function __get(
    string $name
): mixed
```

#### \_\_isset()

[](#__isset-1)

```
public function __isset(
    mixed $name
): void
```

#### offsetSet()

[](#offsetset-1)

```
public function offsetSet(
    mixed $key,
    mixed $value
): void

@SuppressWarnings (PHPMD.UnusedFormalParameter)
```

#### offsetUnset()

[](#offsetunset-1)

```
public function offsetUnset(
    mixed $key
): void

@SuppressWarnings (PHPMD.UnusedFormalParameter)
```

#### offsetGet()

[](#offsetget-1)

```
public function offsetGet(
    mixed $key
): mixed
```

#### offsetExists()

[](#offsetexists-1)

```
public function offsetExists(
    mixed $key
): bool
```

#### \_\_construct()

[](#__construct-2)

```
public function __construct(
    object|array $array = [],
    int $flags = 0,
    string $iteratorClass = 'ArrayIterator'
): void
```

#### append()

[](#append-1)

```
public function append(
    mixed $value
): void
```

#### getArrayCopy()

[](#getarraycopy-1)

```
public function getArrayCopy(): void
```

#### count()

[](#count-1)

```
public function count(): void
```

#### getFlags()

[](#getflags-1)

```
public function getFlags(): void
```

#### setFlags()

[](#setflags-1)

```
public function setFlags(
    int $flags
): void
```

#### asort()

[](#asort-1)

```
public function asort(
    int $flags = 0
): void
```

#### ksort()

[](#ksort-1)

```
public function ksort(
    int $flags = 0
): void
```

#### uasort()

[](#uasort-1)

```
public function uasort(
    callable $callback
): void
```

#### uksort()

[](#uksort-1)

```
public function uksort(
    callable $callback
): void
```

#### natsort()

[](#natsort-1)

```
public function natsort(): void
```

#### natcasesort()

[](#natcasesort-1)

```
public function natcasesort(): void
```

#### unserialize()

[](#unserialize-1)

```
public function unserialize(
    string $data
): void
```

#### serialize()

[](#serialize-1)

```
public function serialize(): void
```

#### \_\_serialize()

[](#__serialize-1)

```
public function __serialize(): void
```

#### \_\_unserialize()

[](#__unserialize-1)

```
public function __unserialize(
    array $data
): void
```

#### getIterator()

[](#getiterator-1)

```
public function getIterator(): void
```

#### exchangeArray()

[](#exchangearray-1)

```
public function exchangeArray(
    object|array $array
): void
```

#### setIteratorClass()

[](#setiteratorclass-1)

```
public function setIteratorClass(
    string $iteratorClass
): void
```

#### getIteratorClass()

[](#getiteratorclass-1)

```
public function getIteratorClass(): void
```

#### \_\_debugInfo()

[](#__debuginfo-1)

```
public function __debugInfo(): void
```

### 📂 Tomrf\\Seminorm\\Data\\Value::class

[](#-tomrfseminormdatavalueclass)

#### \_\_construct()

[](#__construct-3)

```
public function __construct(
    string|int|float|bool|null $data
): void
```

#### \_\_toString()

[](#__tostring)

```
public function __toString(): string
```

#### asString()

[](#asstring)

```
public function asString(): string
```

#### asInt()

[](#asint)

```
public function asInt(): int
```

#### asFloat()

[](#asfloat)

```
public function asFloat(): float
```

#### asBool()

[](#asbool)

```
public function asBool(): bool
```

#### isNumeric()

[](#isnumeric)

```
public function isNumeric(): bool
```

#### isInt()

[](#isint)

```
public function isInt(): bool
```

#### isString()

[](#isstring)

```
public function isString(): bool
```

#### isBool()

[](#isbool)

```
public function isBool(): bool
```

#### isNull()

[](#isnull)

```
public function isNull(): bool
```

#### getType()

[](#gettype)

```
public function getType(): string
```

### 📂 Tomrf\\Seminorm\\Factory\\Factory::class

[](#-tomrfseminormfactoryfactoryclass)

#### \_\_construct()

[](#__construct-4)

```
public function __construct(
    string $class
): void

@param    class-string $class
```

#### make()

[](#make)

```
public function make(
    mixed $params
): mixed
```

### 📂 Tomrf\\Seminorm\\Pdo\\PdoConnection::class

[](#-tomrfseminormpdopdoconnectionclass)

#### \_\_construct()

[](#__construct-5)

```
public function __construct(
    PDO|string $dsnOrPdo,
    ?string $username = '',
    ?string $password = '',
    ?array $options = []
): void

@param    \PDO|string $dsnOrPdo DSN string or an existing PDO object
@param    null|array $options PDO options array
```

#### getPdo()

[](#getpdo)

Get the PDO resource object for this connection.

```
public function getPdo(): ?PDO
```

#### getOptions()

[](#getoptions)

Get PDO options array for this connection.

```
public function getOptions(): ?array

@return   null|array
```

#### isConnected()

[](#isconnected)

Returns true if database connection has been established.

```
public function isConnected(): bool
```

#### getDsn()

[](#getdsn)

Get the value of DSN.

```
public function getDsn(): ?string
```

#### getUsername()

[](#getusername)

Get the value of username.

```
public function getUsername(): ?string
```

#### dsn()

[](#dsn)

Static helper function to build DSN string for PDO.

```
public static function dsn(
    string $driver,
    string $dbname,
    ?string $host = '',
    int $port = 3306,
    string $charset = 'utf8mb4'
): string
```

#### connect()

[](#connect)

Connect to the database if not already connected.

```
public function connect(): void

@throws   \RuntimeException
```

#### disconnect()

[](#disconnect)

Disconnect from the database.

```
public function disconnect(): void
```

#### \_\_debugInfo()

[](#__debuginfo-2)

Mask password when dumping.

```
public function __debugInfo(): array

@return   array
```

### 📂 Tomrf\\Seminorm\\Pdo\\PdoQueryExecutor::class

[](#-tomrfseminormpdopdoqueryexecutorclass)

#### \_\_construct()

[](#__construct-6)

```
public function __construct(
    Tomrf\Seminorm\Pdo\PdoConnection $connection,
    ?string $rowClass = '',
    ?string $valueClass = ''
): void
```

#### getRowCount()

[](#getrowcount)

Returns the number of rows affected by the last SQL statement.

```
public function getRowCount(): int
```

#### getLastInsertId()

[](#getlastinsertid)

Returns the last inserted row ID as string.

```
public function getLastInsertId(): string|false
```

#### execute()

[](#execute-1)

Prepare and execute PDOStatement from an instance of QueryBuilderInterface.

```
public function execute(
    Tomrf\Seminorm\Interface\QueryBuilderInterface|string $query,
    array $parameters = []
): static

@throws   \PDOException
```

#### findOne()

[](#findone)

Fetch next row from the result set as Row.

```
public function findOne(): object|array|null

@return   null|(null|object|string)[]|object
```

#### findMany()

[](#findmany)

Fetch all rows from query result set.

```
public function findMany(): object|array

@return   array
```

### 📂 Tomrf\\Seminorm\\QueryBuilder\\QueryBuilder::class

[](#-tomrfseminormquerybuilderquerybuilderclass)

#### \_\_toString()

[](#__tostring-1)

```
public function __toString(): string
```

#### selectFrom()

[](#selectfrom)

```
public function selectFrom(
    string $table,
    string $columns
): static
```

#### insertInto()

[](#insertinto)

Insert a row into a table

```
public function insertInto(
    string $table,
    array $values = []
): static

@param    string $table
@param    array $values
@throws   \InvalidArgumentException
```

#### update()

[](#update)

```
public function update(
    string $table,
    array $values = []
): static

@param    array $values
@throws   \InvalidArgumentException
```

#### deleteFrom()

[](#deletefrom)

```
public function deleteFrom(
    string $table
): static
```

#### set()

[](#set)

```
public function set(
    string $column,
    string|int|float $value
): static
```

#### setRaw()

[](#setraw)

```
public function setRaw(
    string $column,
    string $expression
): static
```

#### setFromArray()

[](#setfromarray)

```
public function setFromArray(
    array $values
): static

@param    array $values
@throws   \InvalidArgumentException
```

#### alias()

[](#alias)

```
public function alias(
    string $expression,
    string $alias
): static
```

#### join()

[](#join)

```
public function join(
    string $table,
    string $joinCondition,
    ?string $joinType = ''
): static
```

#### limit()

[](#limit)

```
public function limit(
    int $limit,
    ?int $offset = null
): static
```

#### offset()

[](#offset)

```
public function offset(
    int $offset
): static
```

#### onDuplicateKey()

[](#onduplicatekey)

```
public function onDuplicateKey(
    string $expression
): static
```

#### getQuery()

[](#getquery)

```
public function getQuery(): string
```

#### getQueryParameters()

[](#getqueryparameters)

```
public function getQueryParameters(): array

@return   (null|bool|float|int|string)[]
```

#### orderByAsc()

[](#orderbyasc)

```
public function orderByAsc(
    string $column
): static
```

#### orderByDesc()

[](#orderbydesc)

```
public function orderByDesc(
    string $column
): static
```

#### select()

[](#select)

```
public function select(
    string $columns
): static
```

#### selectAs()

[](#selectas)

```
public function selectAs(
    string $expression,
    string $alias
): static
```

#### selectRaw()

[](#selectraw)

```
public function selectRaw(
    string $expressions
): static
```

#### selectRawAs()

[](#selectrawas)

```
public function selectRawAs(
    string $expression,
    string $alias
): static
```

#### where()

[](#where)

```
public function where(
    string $column,
    string $operator,
    string|int|float $value
): static
```

#### whereRaw()

[](#whereraw)

```
public function whereRaw(
    string $expression
): static
```

#### whereColumnRaw()

[](#wherecolumnraw)

```
public function whereColumnRaw(
    string $column,
    string $expression
): static
```

#### whereEqual()

[](#whereequal)

```
public function whereEqual(
    string $column,
    string|int|float $value
): static
```

#### whereNotEqual()

[](#wherenotequal)

```
public function whereNotEqual(
    string $column,
    string|int|float $value
): static
```

#### whereNull()

[](#wherenull)

```
public function whereNull(
    string $column
): static
```

#### whereNotNull()

[](#wherenotnull)

```
public function whereNotNull(
    string $column
): static
```

### 📂 Tomrf\\Seminorm\\Sql\\SqlCompiler::class

[](#-tomrfseminormsqlsqlcompilerclass)

#### getQuery()

[](#getquery-1)

```
public function getQuery(): string
```

#### getQueryParameters()

[](#getqueryparameters-1)

```
public function getQueryParameters(): array

@return   (null|bool|float|int|string)[]
```

---

*Generated 2022-11-11T01:32:36+01:00 using 📚[tomrf/readme-gen](https://packagist.org/packages/tomrf/readme-gen)*

###  Health Score

24

—

LowBetter than 31% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity12

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~52 days

Recently: every ~77 days

Total

7

Last Release

1201d ago

PHP version history (2 changes)0.0.1PHP &gt;=8.0

0.0.4PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/c2113e52873316a5ad6f705f08f4218b2ee8c4348b0c693bb87bd9359908d23f?d=identicon)[tom@upnode.no](/maintainers/tom@upnode.no)

---

Top Contributors

[![tomrf](https://avatars.githubusercontent.com/u/1669009?v=4)](https://github.com/tomrf "tomrf (40 commits)")

---

Tags

databaseormpdopdo-mysqlpdo-sqlitephppsr-3query-builderquery-executorormmysqlsqlitesqlpdoquery builder

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/tomrf-seminorm/health.svg)

```
[![Health](https://phpackages.com/badges/tomrf-seminorm/health.svg)](https://phpackages.com/packages/tomrf-seminorm)
```

###  Alternatives

[doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.

9.7k605.0M6.8k](/packages/doctrine-dbal)[cycle/database

DBAL, schema introspection, migration and pagination

71777.8k53](/packages/cycle-database)[cycle/orm

PHP DataMapper ORM and Data Modelling Engine

1.3k917.0k77](/packages/cycle-orm)[tommyknocker/pdo-database-class

Framework-agnostic PHP database library with unified API for MySQL, MariaDB, PostgreSQL, SQLite, MSSQL, and Oracle. Query Builder, caching, sharding, window functions, CTEs, JSON, migrations, ActiveRecord, CLI tools, AI-powered analysis. Zero external dependencies.

846.1k](/packages/tommyknocker-pdo-database-class)[ramadan/easy-model

A Laravel package for enjoyably managing database queries.

111.6k](/packages/ramadan-easy-model)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
