💡 가볍고 실무 친화적인 PHP MySQL 라이브러리
PHP 5.6부터 PHP 8.3까지 폭넓게 호환되며, 단순하고 직관적인 인터페이스로 빠르게 데이터베이스 연동을 구현할 수 있습니다.
mysqli
기반 경량 ORM 스타일 구현:param
,?
스타일의 유연한 바인딩 지원- Prepared Statement 자동 처리
- Iterator 기반
fetch()
지원 - 예외 처리 기반의 안정성 확보
- FakeDb 를 통한 단위 테스트 가능
composer require jonathanbak/mysqlilib
$DB = new MySQLiLib($host, $user, $password, $dbName);
$query = "SELECT * FROM test";
$row = $DB->fetch($query);
var_dump($row);
두 함수 모두 단일 row를 반환하지만, 동작 방식에는 차이가 있습니다.
함수 | 반환 동작 | 반복 호출 시 동작 | 적합한 상황 |
---|---|---|---|
fetch() |
한 줄 반환 | 다음 줄 순차 반환 | 여러 줄 중에서 반복 처리 시 |
fetchOne() |
한 줄 반환 | 매번 동일한 결과 | 단 한 줄만 가져올 때 |
$query = "SELECT * FROM test WHERE id < ?";
$row1 = $DB->fetch($query, [5]);
$row2 = $DB->fetch($query, [5]);
var_dump($row1 === $row2); // false (같은 쿼리 → 다음번 데이터 가져옴)
- 내부적으로
mysqli_result
를 반복해서 읽어오며 이터레이터처럼 작동합니다. - 같은 쿼리/파라미터라도 매 호출마다 다음 행을 반환하며, 더 이상 없으면
null
을 반환합니다.
$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를 반환하는 경우 적합합니다.
$query = "SELECT * FROM test WHERE id = ?";
$rows = [];
while ($row = $DB->fetch($query, [11])) {
$rows[] = $row;
}
$query = "SELECT * FROM test WHERE name LIKE '??%'";
$rows = [];
while ($row = $DB->fetch($query, ['테스트'])) {
$rows[] = $row;
}
$query = "SELECT * FROM test WHERE name LIKE ?";
$rows = [];
while ($row = $DB->fetch($query, ['테스트%'])) {
$rows[] = $row;
}
var_dump($rows);
문자열 전체를 바인딩할 경우
'테스트%'
처럼 와일드카드를 포함시켜 전달합니다.
$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
스타일은 내부적으로?
로 치환되며, 배열의 키를 기준으로 자동 정렬하여 바인딩됩니다.
$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]);
try {
$DB->query("INSERT INTO test SET id = ?", [33]);
} catch (\MySQLiLib\Exception $e) {
echo "에러: " . $e->getMessage();
}
$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]);
사용 중 문의사항이나 버그 제보는 언제든지 아래 이메일로 연락주세요:
MIT License.