jonathanbak/mysqlilib

Simple MySQLi Library

1.4.1 2025-05-21 01:35 UTC

README

Build Status codecov PHP Version

๐Ÿ’ก ๊ฐ€๋ณ๊ณ  ์‹ค๋ฌด ์นœํ™”์ ์ธ PHP MySQL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
PHP 5.6๋ถ€ํ„ฐ PHP 8.3๊นŒ์ง€ ํญ๋„“๊ฒŒ ํ˜ธํ™˜๋˜๋ฉฐ, ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœจ Features

  • mysqli ๊ธฐ๋ฐ˜ ๊ฒฝ๋Ÿ‰ ORM ์Šคํƒ€์ผ ๊ตฌํ˜„
  • :param, ? ์Šคํƒ€์ผ์˜ ์œ ์—ฐํ•œ ๋ฐ”์ธ๋”ฉ ์ง€์›
  • Prepared Statement ์ž๋™ ์ฒ˜๋ฆฌ
  • Iterator ๊ธฐ๋ฐ˜ fetch() ์ง€์›
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด
  • FakeDb ๋ฅผ ํ†ตํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๐Ÿ› ๏ธ Installation

composer require jonathanbak/mysqlilib

๐Ÿ“ฆ Usage

Connect & Fetch

$DB = new MySQLiLib($host, $user, $password, $dbName);
$query = "SELECT * FROM test";
$row = $DB->fetch($query);
var_dump($row);

๐Ÿ” SELECT with Parameters: fetch() vs fetchOne()

๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ ๋‹จ์ผ row๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋™์ž‘ ๋ฐฉ์‹์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๋™์ž‘ ๋ฐ˜๋ณต ํ˜ธ์ถœ ์‹œ ๋™์ž‘ ์ ํ•ฉํ•œ ์ƒํ™ฉ
fetch() ํ•œ ์ค„ ๋ฐ˜ํ™˜ ๋‹ค์Œ ์ค„ ์ˆœ์ฐจ ๋ฐ˜ํ™˜ ์—ฌ๋Ÿฌ ์ค„ ์ค‘์—์„œ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ ์‹œ
fetchOne() ํ•œ ์ค„ ๋ฐ˜ํ™˜ ๋งค๋ฒˆ ๋™์ผํ•œ ๊ฒฐ๊ณผ ๋‹จ ํ•œ ์ค„๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ

โœ… fetch() - ๋ฐ˜๋ณต ํ˜ธ์ถœ๋กœ ๋‹ค์Œ row ์ˆœ์ฐจ ์ ‘๊ทผ

$query = "SELECT * FROM test WHERE id < ?";
$row1 = $DB->fetch($query, [5]);
$row2 = $DB->fetch($query, [5]);

var_dump($row1 === $row2); // false (๊ฐ™์€ ์ฟผ๋ฆฌ โ†’ ๋‹ค์Œ๋ฒˆ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ด)
  • ๋‚ด๋ถ€์ ์œผ๋กœ mysqli_result๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ์–ด์˜ค๋ฉฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์ฟผ๋ฆฌ/ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๋„ ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค ๋‹ค์Œ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋” ์ด์ƒ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

โœ… fetchOne() - ํ•ญ์ƒ ๋‹จ ํ•œ ์ค„๋งŒ ๋ฐ˜ํ™˜

$query = "SELECT * FROM test WHERE id < ?";
$row1 = $DB->fetchOne($query, [5]);
$row2 = $DB->fetchOne($query, [5]);

var_dump($row1 === $row2); // true (๊ฐ™์€ ์ฟผ๋ฆฌ โ†’ ๊ฐ™์€ ๊ฒฐ๊ณผ)
  • ๋‚ด๋ถ€์ ์œผ๋กœ query()๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ fetch_assoc()์œผ๋กœ ์ฆ‰์‹œ ๊ฐ€์ ธ์˜จ ๋’ค ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์กฐ๊ฑด์ด ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ row๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Fetch Multiple Rows (Iterator)

$query = "SELECT * FROM test WHERE id = ?";
$rows = [];
while ($row = $DB->fetch($query, [11])) {
    $rows[] = $row;
}

LIKE Query

$query = "SELECT * FROM test WHERE name LIKE '??%'";
$rows = [];
while ($row = $DB->fetch($query, ['ํ…Œ์ŠคํŠธ'])) {
    $rows[] = $row;
}

LIKE ๊ฒ€์ƒ‰ ์˜ˆ์ œ (? ํ•œ ๊ฐœ๋งŒ ์‚ฌ์šฉ)

$query = "SELECT * FROM test WHERE name LIKE ?";
$rows = [];
while ($row = $DB->fetch($query, ['ํ…Œ์ŠคํŠธ%'])) {
    $rows[] = $row;
}
var_dump($rows);

๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๊ฒฝ์šฐ 'ํ…Œ์ŠคํŠธ%'์ฒ˜๋Ÿผ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ํฌํ•จ์‹œ์ผœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿท๏ธ Named Parameter (:param) ์˜ˆ์ œ

$query = "SELECT * FROM test WHERE id > :id AND name = :name";
$params = [
    'id' => 10,
    'name' => 'ํ™๊ธธ๋™'
];
$rows = [];
while ($row = $DB->fetch($query, $params)) {
    $rows[] = $row;
}
var_dump($rows);

:param ์Šคํƒ€์ผ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ?๋กœ ์น˜ํ™˜๋˜๋ฉฐ, ๋ฐฐ์—ด์˜ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋™ ์ •๋ ฌํ•˜์—ฌ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

INSERT / UPDATE / DELETE

$DB->query("INSERT INTO test SET id = ?, reg_date = ?", [33, date("Y-m-d H:i:s")]);
$DB->query("DELETE FROM test WHERE id = ?", [33]);

Exception Handling

try {
    $DB->query("INSERT INTO test SET id = ?", [33]);
} catch (\MySQLiLib\Exception $e) {
    echo "์—๋Ÿฌ: " . $e->getMessage();
}

Using bind_param()

$DB->bind_param('i');
$DB->query("INSERT INTO test SET id = ?, reg_date = ?", [33, date("Y-m-d H:i:s")]);

$DB->bind_param('i');
$DB->query("DELETE FROM test WHERE id = ?", [33]);

๐Ÿ“ง Contact

์‚ฌ์šฉ ์ค‘ ๋ฌธ์˜์‚ฌํ•ญ์ด๋‚˜ ๋ฒ„๊ทธ ์ œ๋ณด๋Š” ์–ธ์ œ๋“ ์ง€ ์•„๋ž˜ ์ด๋ฉ”์ผ๋กœ ์—ฐ๋ฝ์ฃผ์„ธ์š”:

๐Ÿ“จ jonathanbak@gmail.com

๐Ÿงพ License

MIT License.