Abstraction library for common MySQL/MariaDB DML operations with php-mysqli
Find a file
Victor Westerlund eb11bca86a
feat: add ORDER BY and LIMIT OFFSET methods (#8)
* feat: add ORDER BY and LIMIT OFFSET methods

* feat(doc): add ORDER BY and LIMIT to README
2023-10-16 13:14:21 +02:00
src feat: add ORDER BY and LIMIT OFFSET methods (#8) 2023-10-16 13:14:21 +02:00
.gitignore feat(refactor): add get, update, insert abstraction methods 2023-09-06 14:43:15 +02:00
composer.json fix: namespace 2023-04-18 21:37:57 +02:00
LICENSE initial commit 2023-04-18 21:35:27 +02:00
README.md feat: add ORDER BY and LIMIT OFFSET methods (#8) 2023-10-16 13:14:21 +02:00

php-libmysqldriver

This library provides abstraction methods for common operations on MySQL-like databases like SELECT, UPDATE, and INSERT.

This library is built on top of the PHP MySQL Improved extension.

Install from composer

composer require victorwesterlund/libmysqldriver
use libmysqldriver/MySQL;

Example table name: beverages

id beverage_type beverage_name beverage_size
0 coffee cappuccino 10
1 coffee black 15
2 tea green 10
3 tea black 15
use libmysqldriver\MySQL;

// Pass through: https://www.php.net/manual/en/mysqli.construct.php
$db = new MySQL($host, $user, $pass, $db);

SELECT

Use MySQL->get() to retrieve columns from a database table

$db->get(
  // Name of the database table
  string $table,
  // (Optional) array or string of column(s) names to SELECT
  array|string $columns,
  // (Optional) key, value array of column names and values to filter with WHERE <column> = <value>
  ?array $filter = null,
  // (Optional) order by columns name => direction ("ASC"|"DESC")
  ?array $order_by = null,
  // (Optional) max number of rows to return
  int|array|null $limit = null
): array|bool;
// Returns array of arrays for each row, or bool if $columns = null

Example

// (Optional) array of columns to return from table. Passing null will return a bool if rows were matched
$columns = ["beverage_name", "beverage_size"];

$beverages = $db->get("beverages", $columns);
// SELECT beverage_name, beverage_size FROM beverages
[
  [
    "beverage_name" => "cappuccino",
    "beverage_size" => 10
  ],
  [
    "beverage_name" => "black",
    "beverage_size" => 15
  ],
  // ...etc
]

WHERE

// (Optional) associative array of filters where "<column_name> = <value>"
$filter = ["beverage_type" => "coffee"];

$coffee = $db->get("beverages", $columns, $filter);
// SELECT beverage_name, beverage_size FROM beverages WHERE beverage_type = "coffee"
[
  [
    "beverage_name" => "cappuccino",
    "beverage_size" => 10
  ],
  [
    "beverage_name" => "black",
    "beverage_size" => 15
  ]
]

ORDER BY

You can also pass an associative array as the 4:th argument to MySQL->get() to ORDER BY a column or multiple columns

$coffee = $db->get("beverages", $columns, $filter, ["beverage_name" => "ASC"], 2);
// SELECT beverage_name, beverage_size FROM beverages ORDER BY beverage_name ASC LIMIT 2
[
  [
    "beverage_name" => "tea",
    "beverage_size" => 10
  ],
  [
    "beverage_name" => "tea",
    "beverage_size" => 15
  ],
  // ...etc for "beverage_name = coffee"
]

LIMIT

You can also pass an optional integer or associative array as the 5:th argument to MySQL->get() and LIMIT the rows to match.

Note

Passing (int) 1 will flatten the returned array from get() to two dimensions (k => v)

Passing an integer to LIMIT

This will simply LIMIT the results returned to the integer passed

$coffee = $db->get("beverages", $columns, $filter, null, 1);
// SELECT beverage_name, beverage_size FROM beverages WHERE beverage_type = "coffee" LIMIT 1
[
  "beverage_name" => "cappuccino",
  "beverage_size" => 10
]

Passing an associative array to LIMIT

This will OFFSET and LIMIT the results returned from the first key of the array as OFFSET and the value of that key as LIMIT

$coffee = $db->get("beverages", $columns, $filter, null, [3 => 2]);
// SELECT beverage_name, beverage_size FROM beverages LIMIT 3 OFFSET 2
[
  [
    "beverage_name" => "tea",
    "beverage_size" => 10
  ],
  [
    "beverage_name" => "tea",
    "beverage_size" => 15
  ],
  // ...etc
]

INSERT

Use MySQL->insert() to append a new row to a database table

$db->insert(
  // Name of the database table
  string $table,
  // Array of values to INSERT
  array $values
): bool
// Returns true if row was inserted

Example

$db->insert("beverages", [
  null,
  "coffee",
  "latte",
  10
]);
// INSERT INTO beverages VALUES (null, "coffee", "latte", 10)
true

UPDATE

Modify existing rows with MySQL->update()

$db->get(
  // Name of the database table
  string $table,
  // Key, value array of column names and values to update
  array $fields,
  // (Optional) key, value array of column names and values to limit UPDATE to with WHERE <column> = <value>
  ?array $filter = null,
): bool;
// Returns true if at least 1 row was changed

Example

$db->update("beverages", ["beverage_size" => 10]);
// UPDATE beverages SET beverage_size = 10
true

WHERE

In most cases you probably want to UPDATE against a constaint. Passing an array to the 3:rd argument of MySQL->update() will let you define "equals AND" conditions.

$filter = ["beverage_type" => "coffee"];
$update = ["beverage_size" => 10];

$db->update("beverages", $update, $filter);
// UPDATE beverages SET beverage_size = 10 WHERE beverage_type = "coffee"
true