PHPackages                             katropine/kmapper - 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. katropine/kmapper

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

katropine/kmapper
=================

PHP-MySql data layer

1.1.0(10y ago)2168[1 issues](https://github.com/katropine/kmapper/issues)MITPHPPHP &gt;=5.3.0

Since May 30Pushed 10y ago1 watchersCompare

[ Source](https://github.com/katropine/kmapper)[ Packagist](https://packagist.org/packages/katropine/kmapper)[ Docs](http://github.com/katropine/kmapper)[ RSS](/packages/katropine-kmapper/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (11)Used By (0)

KMapper - MySql Database Layer
==============================

[](#kmapper---mysql-database-layer)

KMapper library is a PHP toolkit for accessing and manipulate MySql database. It provides a query builder class called TableMapper. KMapper is a PDO wrapper library. Data is returned as associative array.

Instructions
============

[](#instructions)

First create a `kmapper.php` file in your `/app/config` or `/application/config` or `/config` directory with content.

- For non MVC framework use define `kmapper.php` config path with `define('KMAPPER_CONFIG_LOCATION', '/my/cistom/path')`

```
return array(
    // default mandatory
    'default' => array(
        'host' => 'localhost',
        'dbname' => 'kdbtest',
        'user' => 'root',
        'password' => 'superpass',
        'prefix' => '',
        'pdoattributes' => array(
            array(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC),
            array(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION),
            array(\PDO::ATTR_EMULATE_PREPARES, false)
        )
    ),
    'db1' => array(
       'host' => 'localhost',
        'dbname' => 'otherdatabase',
        'user' => 'root',
        'password' => 'superpass',
        'prefix' => 'test',
        'pdoattributes' => array(
            array(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC),
            array(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION),
            array(\PDO::ATTR_EMULATE_PREPARES, false)
        )

    )
);
```

Execute first query:
--------------------

[](#execute-first-query)

```
$DataObject = \KMapper\MySql::query("SELECT * FROM t1");
$DataObject = \KMapper\MySql::execute(
    "SELECT * FROM `#__t1` WHERE id = ? AND age = ?",
    array(
        array(12,\PDO::PARAM_INT),
        array(25, \PDO::PARAM_INT)
    )
);
$DataObject = \KMapper\MySql::execute(
    "SELECT * FROM `#__t1` WHERE id = :id AND age = :age",
    array(
        array(':id' => 12,\PDO::PARAM_INT),
        array(':age' => 25, \PDO::PARAM_INT)
    )
);
```

Table Prefix:

```
#__ is a placeholder, it will be replaced with the value from 'prefix' in config.

```

Multiple database connections
-----------------------------

[](#multiple-database-connections)

```
$options['connection'] = new  KMapper\MySqlDbConnect('db1');

$DataObject = \KMapper\MySql::query("SELECT * FROM #__t1", $options);
$DataObject = \KMapper\MySql::execute("SELECT * FROM #__t1 WHERE id = ?", array(12), $options);
```

Query Builder
-------------

[](#query-builder)

```
$UserMP = new \KMapper\TabelMapper("#__user", 'usr');

$UsersDataObject = $UserMP->setSelect(array("usr.first_name", "usr.last_name", "addr.zip"))
                    // table1, joinField1, onTable2, onField2, table1Alias
                    ->setInnerJoin("#__address", "id_user", "usr", "id", "addr")
                    ->setWhere("usr.status != ? AND usr.smart = ? AND (addr.zip = ? OR addr.zip = ?)", array('banned', false, '23000', '21000'))
                    ->setOrderBy("usr.name ASC")
                    ->fetchAll();

var_dump($UsersDataObject->toArray());
var_dump($UsersDataObject->toJson());
```

Insert &amp; Update
-------------------

[](#insert--update)

```
$UserMP = new \KMapper\TabelMapper("#__user");

$data = array(
    'first_name' => "Fu",
    'last_name'  => "Bar"
);
// INSERT, no id provided
$UserMP->save($data);

$data = array(
    'id' => 22,
    'first_name' => "Fu",
    'last_name'  => "Bar"
);
// UPDATE where id = 22
$UserMP->save($data);
```

In case "id" is not the primary key name, key has to be defined:

```
$UserMP = new \KMapper\TabelMapper("#__user");
$UserMP->setPrimaryKeyName('my_unstandard_id')->save($data);
```

Mutiple UPDATE &amp; INSERT
---------------------------

[](#mutiple-update--insert)

```
$UserMP = new \KMapper\TabelMapper("#__user");

$data = array
    array('first_name' => 'Kriss', 'last_name' => 'Kristiansen'),
    array('first_name' => 'Johnny', 'last_name' => 'Johnosn')

);

$UserMP->batchSave($data);
```

WHERE id IN ()
--------------

[](#where-id-in-)

```
$roles = array(1,2,5,8);
// set placeholders
$inPlaceholders =\KMapper\MySql::getPlaceholders($roles);

$i = KMapper\TableMapper::getInstance()
    ->setFrom('#__user')
    ->setWhere("`user_id` = ? AND `group_id` IN ( {$inPlaceholders} )", array_merge(array($user->getId()),$roles))
    ->countAll();
```

Transactions
------------

[](#transactions)

```
try{
    \KMapper\MySql::transactionBegin());

    $last = \KMapper\MySql::query($sqlTask)->getLastID();

    if(!$last){
        throw new \Exception("Could not insert");
    }

    if(!\KMapper\MySql::query($sqlHierarchy)->isSuccess()){
        throw new \Exception("Query error");
    }

    \KMapper\MySql::transactionCommit());

}  catch (PDOException $E){
    \KMapper\MySql::transactionRollback();
}  catch (Exception $E){
    \KMapper\MySql::transactionRollback();
}
```

Install KMapper with Composer
-----------------------------

[](#install-kmapper-with-composer)

```
"require": {
    "katropine/kmapper" : "dev-master"
}

```

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance10

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity64

Established project with proven stability

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

Total

10

Last Release

3779d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/395479b0bb3aafd70f058c5ec1a357ab38abc8de602d1d3e4c8b1c0b28d30af7?d=identicon)[katropine](/maintainers/katropine)

---

Top Contributors

[![katropine](https://avatars.githubusercontent.com/u/2795670?v=4)](https://github.com/katropine "katropine (5 commits)")

---

Tags

databasemysqldal

### Embed Badge

![Health badge](/badges/katropine-kmapper/health.svg)

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

###  Alternatives

[rah/danpu

Zero-dependency MySQL dump library for easily exporting and importing databases

64401.8k10](/packages/rah-danpu)

PHPackages © 2026

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