PHPackages                             kazimolmez/ezsql-fixed - 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. kazimolmez/ezsql-fixed

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

kazimolmez/ezsql-fixed
======================

Advance database access library. Make interacting with a database ridiculously easy. An universal interchangeable CRUD system.

v1(1y ago)02LGPL-3.0-or-laterPHPPHP &gt;7.1

Since May 7Pushed 1y agoCompare

[ Source](https://github.com/kazimolmez/ezsql-fixed)[ Packagist](https://packagist.org/packages/kazimolmez/ezsql-fixed)[ RSS](/packages/kazimolmez-ezsql-fixed/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (2)Versions (2)Used By (0)

**ezsql-fixed**
===============

[](#ezsql-fixed)

[![Total Downloads](https://camo.githubusercontent.com/ca34f26281d8c9c341e1478f1d460e55c8aed97b4967897759d60c4ed943e9cd/68747470733a2f2f706f7365722e707567782e6f72672f6b617a696d6f6c6d657a2f657a73716c2d66697865642f646f776e6c6f616473)](https://packagist.org/packages/kazimolmez/ezsql-fixed)

***A class to make it very easy to deal with database connections.****An universal interchangeable **CRUD** system.*

Mainly by:

- The use of `namespace` in the `global` functions **ezFunctions.php** file. Usage of the **global** functions will require the user to begin a `.php` file something like:

    ```
    use function ezsql\functions\where;
    // Or
    use function ezsql\functions\{
        getInstance,
        selecting,
        inserting,
    };
    ```
- Class properties that was accessible by magic methods `get/set`, now PSR 1 camelCase.
- Renamed `select` of `ez_mysqli` to `dbSelect`.
- Renamed class method and behavior of `selecting` to `select`.
- `selecting`, and new `inserting` methods, can be called without table name, only the other necessary parameters:

    - The table *name* with *prefix*, can be preset/stored with methods `tableSetup(name, prefix), or setTable(name), setPrefix(append)`, if called without presetting, `false` is returned.
    - This **feature** will be added to **all** database *CRUD* access methods , each method name will have an `ing` ending added.
- Removed global functions where `table` name passed in, use functions using preset table names ending with `ing`.
- renamed cleanInput to clean\_string
- renamed createCertificate to create\_certificate
- added global get\_results to return result sets in different formats

This library has an `Database` class, an combination of the [Factory](https://en.wikipedia.org/wiki/Factory_method_pattern) pattern with an [Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection) container hosting. This library now is following many OOP principles, one in which, the methods properties public access has been removed. This library also following PSR-2, PSR-4, PSR-11 conventions, and mostly PSR-1, that's still an work in progress.

- More Todo...

For an full overview see [documentation Wiki](https://github.com/kazimolmez/ezsql-fixed/wiki/Documentation), which is not completely finish.

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

[](#installation)

```
composer require kazimolmez/ezsql-fixed

```

Usage
-----

[](#usage)

```
require 'vendor/autoload.php';

// **** is one of mysqli, pgsql, sqlsrv, sqlite3, or Pdo.
use ezsql\Database;

$db = Database::initialize('****', [$dsn_path_user, $password, $database, $other_settings], $optional_tag);

// Is same as:
use ezsql\Config;
use ezsql\Database\ez_****;

$settings = new Config('****', [$dsn_path_user, $password, $database, $other_settings]);

$db = new ez_****($settings);
```

This library will assume the developer is using some sort of IDE with intellisense enabled. The comments/doc-block area will hold any missing documentations. For additional examples see **phpunit** tests, The tests are fully functional integration tests, meaning the are live database tests, no mocks.

The following has been added since version 2.1.7.

***General Methods***

```
to_string($arrays, $separation = ',');
clean($string);
create_cache(string $path = null);
secureSetup(string $key = 'certificate.key',
    string $cert = 'certificate.crt',
    string $ca = 'cacert.pem',
    string $path = '.'._DS
);
secureReset();
create_certificate(string $privatekeyFile = certificate.key,
    string $certificateFile = certificate.crt,
    string $signingFile = certificate.csr,
    string $ssl_path = null, array $details = [commonName => localhost]
);

```

***Shortcut Table Methods***

```
create(string $table = null, ...$schemas);// $schemas requires... column()
column(string $column = null, string $type = null, ...$args);
primary(string $primaryName, ...$primaryKeys);
index(string $indexName, ...$indexKeys);
drop(string $table);

```

Example

```
// Creates an database table
create('profile',
    // and with database column name, datatype
    // data types are global CONSTANTS
    // SEQUENCE|AUTO is placeholder tag, to be replaced with the proper SQL drivers auto number sequencer word.
    column('id', INTR, 11, AUTO, PRIMARY), // mysqli
    column('name', VARCHAR, 50, notNULL),
    column('email', CHAR, 25, NULLS),
    column('phone', TINYINT)
);
```

---

```
innerJoin(string $leftTable = null, string $rightTable = null,
    string $leftColumn = null, string $rightColumn = null, string $tableAs = null, $condition = EQ);

leftJoin(string $leftTable = null, string $rightTable = null,
    string $leftColumn = null, string $rightColumn = null, string $tableAs = null, $condition = EQ);

rightJoin(string $leftTable = null, string $rightTable = null,
    string $leftColumn = null, string $rightColumn = null, string $tableAs = null, $condition = EQ);

fullJoin(string $leftTable = null, string $rightTable = null,
    string $leftColumn = null, string $rightColumn = null, string $tableAs = null, $condition = EQ);

```

---

```
prepareOn(); // When activated will use prepare statements for all shortcut SQL Methods calls.
prepareOff(); // When off shortcut SQL Methods calls will use vendors escape routine instead. This is the default behavior.
```

### Shortcut SQL Methods

[](#shortcut-sql-methods)

- `having(...$having);`
- `groupBy($groupBy);`
- `union(string $table = null, $columnFields = '*', ...$conditions);`
- `unionAll(string $table = null, $columnFields = '*', ...$conditions);`
- `orderBy($orderBy, $order);`
- `limit($numberOf, $offset = null)`
- `where( ...$whereConditions);`
- `select(string $table = null, $columnFields = '*', ...$conditions);`
- `create_select(string $newTable, $fromColumns, $oldTable = null, ...$conditions);`
- `select_into(string $newTable, $fromColumns, $oldTable = null, ...$conditions);`
- `update(string $table = null, $keyAndValue, ...$whereConditions);`
- `delete(string $table = null, ...$whereConditions);`
- `replace(string $table = null, $keyAndValue);`
- `insert(string $table = null, $keyAndValue);`
- `create(string $table = null, ...$schemas);`
- `drop(string $table = null);`
- `alter(string $table = null, ...$alteringSchema);`
- `insert_select(string $toTable = null, $toColumns = '*', $fromTable = null, $fromColumns = '*', ...$conditions);`

```
// The variadic ...$whereConditions, and ...$conditions parameters,
//  represent the following global functions.
// They are comparison expressions returning an array with the given arguments,
//  the last arguments of _AND, _OR, _NOT, _andNOT will combine expressions
eq('column', $value, _AND), // combine next expression
neq('column', $value, _OR), // will combine next expression again
ne('column', $value), // the default is _AND so will combine next expression
lt('column', $value)
lte('column', $value)
gt('column', $value)
gte('column', $value)
isNull('column')
isNotNull('column')
like('column', '_%?')
notLike('column', '_%?')
in('column', ...$value)
notIn('column', ...$value)
between('column', $value, $value2)
notBetween('column', $value, $value2)
// The above should be used within the where( ...$whereConditions) clause
// $value will protected by either using escape or prepare statement
```

```
// To allow simple grouping of basic $whereConditions,
// wrap the following around a group of the above comparison
// expressions within the where( ...$whereConditions) clause
grouping( eq(key, value, combiner ), eq(key, value, combiner ) )
// The above will wrap beginning and end grouping in a where statement
// where required to break down your where clause.
```

```
// Note: The usage of this method will require the user/developer to check
// if `query_string` or `param_array` is valid.
//
// This is really an `private` internal method for other shortcut methods,
// it's made public for `class development` usage only.
//
//
// Supply the the whole `query` string, and placing '?' within, with the same number of arguments in an array.
// It will then determine arguments type, execute, and return results.
query_prepared(string $query_string, array $param_array);
// You will need to call this method to get last successful query result.
// It wll return an object array.
queryResult();
```

#### Example for using prepare statements indirectly, with above shortcut SQL methods

[](#example-for-using-prepare-statements-indirectly-with-above-shortcut-sql-methods)

```
// To get all shortcut SQL methods calls to use prepare statements
$db->prepareOn(); // This needs to be called at least once at instance creation

$values = [];
$values['name'] = $user;
$values['email'] = $address;
$values['phone'] = $number;
$db->insert('profile', $values);
$db->insert('profile', ['name' => 'john john', 'email' => 'john@email', 'phone' => 123456]);

// returns result set given the table name, column fields, and ...conditions
$result = $db->select('profile', 'phone', eq('email', $email), between('id', 1, $values));

foreach ($result as $row) {
    echo $row->phone;
}

$result = $db->select('profile', 'name, email',
    // Conditionals can also be called, stacked with other functions like:
    //  innerJoin(), leftJoin(), rightJoin(), fullJoin()
    //      as (leftTable, rightTable, leftColumn, rightColumn, tableAs, equal condition),
    //  where( eq( columns, values, _AND ), like( columns, _d ) ),
    //  groupBy( columns ),
    //  having( between( columns, values1, values2 ) ),
    //  orderBy( columns, desc ),
    //  limit( numberOfRecords, offset ),
    //  union(table, columnFields, conditions),
    //  unionAll(table, columnFields, conditions)
    $db->where( eq('phone', $number, _OR), neq('id', 5) ),
    //  another way: where( array(key, operator, value, combine, combineShifted) );
    //  or as strings double spaced: where( "key  operator  value  combine  combineShifted" );
    $db->orderBy('name'),
    $db->limit(1)
);

foreach ($result as $row) {
    echo $row->name.' '.$row->email;
}

// To get results in `JSON` format
$json = get_results(JSON, $db);
```

#### Example for using prepare statements directly, no shortcut SQL methods used

[](#example-for-using-prepare-statements-directly-no-shortcut-sql-methods-used)

```
$db->query_prepared('INSERT INTO profile( name, email, phone) VALUES( ?, ?, ? );', [$user, $address, $number]);

$db->query_prepared('SELECT name, email FROM profile WHERE phone = ? OR id != ?', [$number, 5]);
$result = $db->queryResult(); // the last query that has results are stored in `lastResult` protected property
// Or for results in other formats use the global function, will use global database instance if no `$db` supplied
$result = get_results(/* OBJECT|ARRAY_A|ARRAY_N|JSON */, $db); // Defaults to `OBJECT`

foreach ($result as $row) {
    echo $row->name.' '.$row->email;
}
```

Most of shortcut methods have counter **global** *functions* available. They can only be access by beginning your `.php` file like:

```
use function ezsql\functions\functionBelow;
// Or as here, a complete list.
use function ezsql\functions\{
    database,
    mysqlInstance,
    pgsqlInstance,
    mssqlInstance,
    sqliteInstance,
    pdoInstance,
    tagInstance,
    setInstance,
    getInstance,
    clearInstance,
    get_vendor,
///
    to_string,
    clean_string,
    is_traversal,
    sanitize_path,
    create_certificate,
///
    column,
    primary,
    foreign,
    unique,
    index,
    addColumn,
    dropColumn,
    changingColumn,
///
    eq,
    neq,
    ne,
    lt,
    lte,
    gt,
    gte,
    isNull,
    isNotNull,
    like,
    in,
    notLike,
    notIn,
    between,
    notBetween,
///
    where,
    grouping,
    groupBy,
    having,
    orderBy,
    limit,
    innerJoin,
    leftJoin,
    rightJoin,
    fullJoin,
    union,
    unionAll,
///
    creating,
    deleting,
    dropping,
    replacing,
    selecting,
    inserting,
    altering,
    get_results,
    table_setup,
    set_table,
    set_prefix,
    select_into,
    insert_select,
    create_select,
};
```

For the functions **usage/docs** see [ezFunctions.php](https://github.com/kazimolmez/ezsql-fixed/blob/v5/lib/ezFunctions.php).

For Authors and **[Contributors](https://github.com/ezSQL/ezsql/blob/master/CONTRIBUTORS.md)**
----------------------------------------------------------------------------------------------

[](#for-authors-and-contributors)

License
-------

[](#license)

**ezsql-fixed** is open-sourced software licensed originally under (LGPL-3.0), and the addon parts under (MIT).

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance49

Moderate activity, may be stable

Popularity2

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

 Bus Factor1

Top contributor holds 81.8% 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

Unknown

Total

1

Last Release

377d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8162bb4728b38bf416145243c68de47a8ec7ed1b820490ca3b96963793b6ff4d?d=identicon)[kazimolmez](/maintainers/kazimolmez)

---

Top Contributors

[![TheTechsTech](https://avatars.githubusercontent.com/u/29784725?v=4)](https://github.com/TheTechsTech "TheTechsTech (775 commits)")[![jv2222](https://avatars.githubusercontent.com/u/342192?v=4)](https://github.com/jv2222 "jv2222 (55 commits)")[![dpDesignz](https://avatars.githubusercontent.com/u/361972?v=4)](https://github.com/dpDesignz "dpDesignz (26 commits)")[![fawaf](https://avatars.githubusercontent.com/u/639565?v=4)](https://github.com/fawaf "fawaf (23 commits)")[![ozh](https://avatars.githubusercontent.com/u/223647?v=4)](https://github.com/ozh "ozh (17 commits)")[![JohnRDOrazio](https://avatars.githubusercontent.com/u/231298?v=4)](https://github.com/JohnRDOrazio "JohnRDOrazio (5 commits)")[![kazimolmez](https://avatars.githubusercontent.com/u/7883868?v=4)](https://github.com/kazimolmez "kazimolmez (5 commits)")[![winkm89](https://avatars.githubusercontent.com/u/9537674?v=4)](https://github.com/winkm89 "winkm89 (5 commits)")[![scottmci](https://avatars.githubusercontent.com/u/129999544?v=4)](https://github.com/scottmci "scottmci (4 commits)")[![Xymanek](https://avatars.githubusercontent.com/u/2865341?v=4)](https://github.com/Xymanek "Xymanek (3 commits)")[![mikesalmonuk](https://avatars.githubusercontent.com/u/5956319?v=4)](https://github.com/mikesalmonuk "mikesalmonuk (3 commits)")[![yohancreemers](https://avatars.githubusercontent.com/u/4000329?v=4)](https://github.com/yohancreemers "yohancreemers (3 commits)")[![wninaus](https://avatars.githubusercontent.com/u/6861252?v=4)](https://github.com/wninaus "wninaus (3 commits)")[![lucanos](https://avatars.githubusercontent.com/u/126774?v=4)](https://github.com/lucanos "lucanos (2 commits)")[![madvik](https://avatars.githubusercontent.com/u/3822529?v=4)](https://github.com/madvik "madvik (2 commits)")[![hubaishan](https://avatars.githubusercontent.com/u/2285457?v=4)](https://github.com/hubaishan "hubaishan (2 commits)")[![ricardopadilha](https://avatars.githubusercontent.com/u/1210756?v=4)](https://github.com/ricardopadilha "ricardopadilha (2 commits)")[![yuks](https://avatars.githubusercontent.com/u/2283558?v=4)](https://github.com/yuks "yuks (1 commits)")[![crimsonfalconer](https://avatars.githubusercontent.com/u/11565548?v=4)](https://github.com/crimsonfalconer "crimsonfalconer (1 commits)")[![if3lc](https://avatars.githubusercontent.com/u/830333?v=4)](https://github.com/if3lc "if3lc (1 commits)")

---

Tags

abstractiondatabasemysqlsqlitepostgresqlsqlpdosqlservermssqlsqlsrvcrudmysqlisqlite3dba

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/kazimolmez-ezsql-fixed/health.svg)

```
[![Health](https://phpackages.com/badges/kazimolmez-ezsql-fixed/health.svg)](https://phpackages.com/packages/kazimolmez-ezsql-fixed)
```

###  Alternatives

[ezsql/ezsql

Advance database access library. Make interacting with a database ridiculously easy. An universal interchangeable CRUD system.

86946.7k](/packages/ezsql-ezsql)[jv2222/ezsql

Advance database access library. Make interacting with a database ridiculously easy. An universal interchangeable CRUD system.

87311.3k2](/packages/jv2222-ezsql)[doctrine/dbal

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

9.7k578.4M5.6k](/packages/doctrine-dbal)[dibi/dibi

Dibi is Database Abstraction Library for PHP

5013.8M120](/packages/dibi-dibi)[aura/sqlquery

Object-oriented query builders for MySQL, Postgres, SQLite, and SQLServer; can be used with any database connection library.

4572.9M34](/packages/aura-sqlquery)[aura/sqlschema

Provides facilities to read table names and table columns from a database using PDO.

41234.1k4](/packages/aura-sqlschema)

PHPackages © 2026

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