steinhaug/mysqli

Mysqli Abstraction Layer

v1.9.0 2025-06-11 05:56 UTC

This package is auto-updated.

Last update: 2025-06-11 05:59:21 UTC


README

Mysqli Abstraction Layer v1.9.0

Table of Contents

1. Description

Mysqli2 is an enhanced wrapper around PHP's native MySQLi extension that provides simplified prepared statement execution, better error handling, and development/production mode switching. The class extends mysqli, inheriting all native MySQLi methods while adding streamlined functionality.

Key Features

  • Singleton Pattern: Single database connection instance
  • Development/Production Modes: Configurable error reporting
  • Simplified Prepared Statements: Streamlined syntax for common operations
  • Smart Return Values: Context-aware return types based on SQL operation
  • Exception Handling: Optional exception throwing with detailed error information

2. Version History

2.1 Log

v1.9.0

- Ny refaktorert klasse, nye metoder. Se docs/mysqli2_documentation.md

V1.7.0

- Breaking file into smaller files, better readability.

v1.6.6

- Updated readme.

v1.6.5

- Bugfix, error_number has to be int

v1.6.4

- buddy() updated, has prepared output aswell. echo $mysqli->buddy('table','insert','prepared');
- parse_col_type, added prepared for type

v1.6.3

- Added mode for ->result('assoc') without using second parameter.

v1.6.2

- Updated for PHP 8.1  

3. Install by composer

To install the library use composer:

composer require steinhaug/mysqli

4. Code Examples

4.1 Basic Init

// Enable development mode (verbose errors)
Mysqli2::isDev(true);

// Get singleton instance with connection parameters
$mysqli = Mysqli2::getInstance($mysql_host, $mysql_port, $mysql_user, $mysql_password, $mysql_database);

// Set character encoding
$mysqli->set_charset("utf8");

// Check connection
if ($mysqli->connect_errno) {
    echo 'Failed to connect to MySQL: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error; 
    exit();
}

4.2 Query

Prepared query, quick query returns associated array:

$TestID = 1;
$row = $mysqli->prepared_query1('SELECT * FROM `zzz_testtable` WHERE `TestID`=?', 'i', [$TestID], true);
if($row===null){
    throw new Exception('prepared_query1(sql,true) error');
}

Prepared query, results comes in array

$TestID = 5;
$resultset = $mysqli->prepared_query('SELECT * FROM `zzz_testtable` WHERE `TestID`=?', 'i', [$TestID]);
if( !count($resultset) ){
    throw new Exception('prepared_query() returned unexpected result');
}
// echo $resultset[0]

Prepared delete:

$TestID = 1;
$UserID = 1;
$affected_rows = $mysqli->prepared_query('DELETE FROM `zzz_testtable` WHERE `TestID`=? AND `user_id`=?', 'ii', [$TestID, $UserID]);
if (!$affected_rows) {
    throw new Exception('prepared_query(delete from...) reported 0 deletion');
}

Prepared insert:

$sql = [
    'INSERT INTO `table_name` (`col_name`, `col_name_two`, `col_name_three`, `col_name_four`, `col_name_five`) VALUES (?,?,?,?,?)',
    'issds',
    [$variable, '2020-01-01 00:00:00', 'test/test@test.com', 1.23, '2020-01-01 00:00:00'],
];
$InsertId = $mysqli->prepared_insert($sql);
if (!$InsertId) {
    throw new Exception('prepared_insert(insert into) inserted_id error');
}

5. Information

5.1 License

This project is licensed under the terms of the MIT License. Enjoy!

5.2 Author

Kim Steinhaug, steinhaug at gmail dot com.

Sosiale lenker: LinkedIn, SoundCloud, Instagram, Youtube, X, Ko-Fi, Github, Gitlab

Generative AI lenker: Udio, Suno, Huggingface

Resurser og hjelpesider: Linktr.ee/steinhaugai, Linktr.ee/stainhaug, pinterest/steinhaug, pinterest/stainhaug