PHPackages                             flyokai/zend-db-sql-insertmultiple - 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. flyokai/zend-db-sql-insertmultiple

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

flyokai/zend-db-sql-insertmultiple
==================================

0.1.0(1mo ago)08↓100%BSD-3-ClausePHPPHP &gt;=5.3.23

Since Apr 25Pushed 1mo agoCompare

[ Source](https://github.com/flyokai/zend-db-sql-insertmultiple)[ Packagist](https://packagist.org/packages/flyokai/zend-db-sql-insertmultiple)[ Docs](https://github.com/nanawel/zend-db-sql-insertmultiple)[ RSS](/packages/flyokai-zend-db-sql-insertmultiple/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (2)Versions (6)Used By (0)

flyokai/zend-db-sql-insertmultiple
==================================

[](#flyokaizend-db-sql-insertmultiple)

> User docs → [`README.md`](README.md) · Agent quick-ref → [`CLAUDE.md`](CLAUDE.md) · Agent deep dive → [`AGENTS.md`](AGENTS.md)

> Multi-row `INSERT INTO … VALUES (…), (…), (…)` for Laminas DB.

Adds `Laminas\Db\Sql\InsertMultiple`, a single-statement multi-row insert builder that is otherwise missing from Laminas DB. Adapted from the original `Zend\Db\Sql\Insert`.

Features
--------

[](#features)

- Multi-row `INSERT … VALUES (…), (…), (…)`
- `INSERT … SELECT`
- Two value-merging strategies: `VALUES_SET` (replace) and `VALUES_MERGE` (append)
- Compatible with Laminas `Sql::buildSqlString()` / `Sql::prepareStatementForSqlObject()`

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

[](#installation)

```
composer require flyokai/zend-db-sql-insertmultiple
```

Quick start
-----------

[](#quick-start)

### Multi-row insert

[](#multi-row-insert)

```
use Laminas\Db\Sql\InsertMultiple;
use Laminas\Db\Sql\Sql;

$insert = new InsertMultiple('users');
$insert->columns(['email', 'name', 'status']);
$insert->values([
    ['alice@example.com', 'Alice', 1],
    ['bob@example.com',   'Bob',   0],
]);

$sql = new Sql($adapter);
$stmt = $sql->prepareStatementForSqlObject($insert);
$stmt->execute();

// → INSERT INTO users (email, name, status) VALUES (?, ?, ?), (?, ?, ?)
```

### `INSERT … SELECT`

[](#insert--select)

```
$insert = new InsertMultiple('users');
$insert->columns(['email', 'name']);
$insert->select(
    $sql->select('staging_users')->columns(['email', 'name'])
);

// → INSERT INTO users (email, name) SELECT email, name FROM staging_users
```

### Value merging

[](#value-merging)

```
$insert->values([['a@b.com', 'A']]);                                   // sets the rows
$insert->values(['c@d.com', 'C'], InsertMultiple::VALUES_MERGE);       // appends a row
```

API
---

[](#api)

MethodPurpose`into(string $table)`Set target table`columns(array $columns)`Define column list (call before `values()`)`values(array|Select $values, int $flag = VALUES_SET)`Set/append rows or provide a `Select``select(Select $select)`Convenience for `INSERT…SELECT``getRawState($key)`Introspect internal state (for debugging)Internals
---------

[](#internals)

- Each row is `ksort()`-ed for consistent column ordering.
- Named parameters are generated as `insMulti0`, `insMulti1`, …
- Non-scalar values (Expressions, Literals) are cached per column to avoid redundant SQL generation.

Gotchas
-------

[](#gotchas)

- **`columns()` is required** before `values()` with array data. Missing columns throws `InvalidArgumentException`.
- **No built-in chunking** — generates a single statement for all rows. MySQL has statement size limits (~1000 tuples by default). Calling code must chunk.
- **Empty values produce empty SQL** — if no rows, `processInsert()` returns an empty string silently.
- **Cannot mix `VALUES_MERGE` with a `Select`** — throws.
- **Parameter naming is global** — counter is shared across all rows (`insMulti0`, `insMulti1`, …).

See also
--------

[](#see-also)

- [`flyokai/laminas-db-bulk-update`](../laminas-db-bulk-update/README.md) — `InsertOnDuplicate` extends `InsertMultiple` with upsert behaviour and ID resolution
- [`flyokai/laminas-db`](../laminas-db/README.md) — base abstraction

License
-------

[](#license)

BSD-3-Clause

###  Health Score

33

—

LowBetter than 73% of packages

Maintenance92

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity22

Early-stage or recently created project

 Bus Factor2

2 contributors hold 50%+ of commits

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 ~2 days

Total

3

Last Release

41d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/247743048?v=4)[flyokai](/maintainers/flyokai)[@flyokai](https://github.com/flyokai)

---

Top Contributors

[![nanawel](https://avatars.githubusercontent.com/u/4866761?v=4)](https://github.com/nanawel "nanawel (7 commits)")[![flyokai](https://avatars.githubusercontent.com/u/247743048?v=4)](https://github.com/flyokai "flyokai (6 commits)")[![wtsergo](https://avatars.githubusercontent.com/u/305326?v=4)](https://github.com/wtsergo "wtsergo (4 commits)")

---

Tags

laminasdbzf2

### Embed Badge

![Health badge](/badges/flyokai-zend-db-sql-insertmultiple/health.svg)

```
[![Health](https://phpackages.com/badges/flyokai-zend-db-sql-insertmultiple/health.svg)](https://phpackages.com/packages/flyokai-zend-db-sql-insertmultiple)
```

###  Alternatives

[laminas/laminas-db

Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations

14023.2M224](/packages/laminas-laminas-db)[samsonasik/error-hero-module

A Hero for your Laminas and Mezzio application to trap php errors &amp; exceptions

5233.6k1](/packages/samsonasik-error-hero-module)[php-db/phpdb

Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations

1943.3k11](/packages/php-db-phpdb)[nitecon/zf2-db-session

Zend Framework 2 database session storage

204.8k](/packages/nitecon-zf2-db-session)

PHPackages © 2026

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