PHP 응용 프로그램을 개발할 때 MySQLI 확장은 MySQL 데이터베이스와 상호 작용하는 일반적인 방법입니다. 프로젝트가 계속 확장됨에 따라 MySQLI 기능을 직접 사용하면 코드의 복제, 높은 커플 링 및 유지 관리가 어려울 수 있습니다. 코드 재사용 성과 유지 관리를 향상시키기 위해 MySQLI_Result 함수를 공통 데이터 액세스 계층으로 캡슐화 할 수 있습니다.
이 기사는 MySQLI_RESULT 기능을 캡슐화하는 방법을 소개하고 효율적이고 관리하기 쉬운 데이터 액세스 계층을 구축하는 데 도움이되는 코드 예제를 제공합니다.
데이터 액세스 계층의 목적은 데이터베이스 작업을 비즈니스 로직과 분리하여 데이터베이스의 액세스 로직이 응용 프로그램의 비즈니스 코드에 직접 나타나지 않도록하는 것입니다. 데이터베이스 작업을 캡슐화함으로써 코드의 재사용 성 및 유지 관리 가능성이 향상 될 수 있으며, 이후 단계에서 데이터베이스를 교체하기가 어려워 질 수 있습니다.
데이터 액세스 계층을 설계 할 때 고려해야 할 몇 가지 사항은 다음과 같습니다.
데이터베이스 연결 캡슐화 : 데이터베이스를 작동 할 때마다 연결 코드의 반복 쓰기를 피하십시오.
쿼리 결과 처리 단순화 : MySQLI_RESULT 및 프로세스 쿼리의 작동을 통합 방식으로 캡슐화하십시오.
CRUD 작업 지원 : 공통 추가, 삭제, 수정 및 점검 작업을 지원합니다.
코드 재사용성 향상 : 캡슐화를 통해 데이터베이스 작동 코드 재사용 성이 높고 코드 중복성이 줄어 듭니다.
먼저 데이터베이스의 연결 및 쿼리 작업을 관리하기 위해 데이터베이스 클래스를 작성해야합니다.
class Database {
private $connection;
// 생성자는 데이터베이스 연결을 초기화합니다
public function __construct($host, $user, $password, $dbname) {
$this->connection = new mysqli($host, $user, $password, $dbname);
if ($this->connection->connect_error) {
die("연결이 실패했습니다: " . $this->connection->connect_error);
}
}
// 쿼리를 실행하십시오,반환 결과 세트
public function query($sql) {
$result = $this->connection->query($sql);
if (!$result) {
die("쿼리가 실패했습니다: " . $this->connection->error);
}
return $result;
}
// 데이터베이스 연결을 닫습니다
public function close() {
$this->connection->close();
}
}
위의 코드에서는 데이터베이스 연결을 초기화하기위한 생성자로 데이터베이스 클래스를 캡슐화하고 SQL 쿼리를 실행하고 결과 세트를 반환하기위한 쿼리 메소드를 캡슐화합니다.
mysqli_result는 쿼리 결과를 저장하는 데 사용되는 MySQLI 의 객체입니다. 데이터 액세스 계층을 빌드 할 때는 일반적으로 결과 세트의 작동을보다 간결하게 만들기 위해 MySQLI_RESULT를 캡슐화해야합니다.
다음은 mysqli_result를 캡슐화하는 방법에 대한 코드 예입니다.
class DbResult {
private $result;
// 생성자는 쿼리 결과를 수신합니다
public function __construct($result) {
$this->result = $result;
}
// 모든 결과를 얻으십시오
public function fetchAll() {
$rows = [];
while ($row = $this->result->fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}
// 단일 라인 결과를 얻으십시오
public function fetchOne() {
return $this->result->fetch_assoc();
}
// 행 수를 얻으십시오
public function numRows() {
return $this->result->num_rows;
}
}
위의 코드에서 DBresult 클래스는 MySQLI_RESULT 객체를 캡슐화하고 다음 방법을 제공합니다.
fetchall () : 모든 쿼리 결과를 얻습니다.
fetchone () : 단일 쿼리 결과를 얻으십시오.
Numrows () : 쿼리 결과의 행 수를 반환합니다.
데이터베이스 클래스와 결과 세트 캡슐화 클래스를 결합하여 다음과 같이 전체 데이터 액세스 계층을 만들 수 있습니다.
class DataAccessLayer {
private $db;
// 생성자는 데이터베이스 연결을 초기화합니다
public function __construct($host, $user, $password, $dbname) {
$this->db = new Database($host, $user, $password, $dbname);
}
// 데이터를 쿼리하고 캡슐화 된 결과 세트를 반환하십시오
public function fetchData($sql) {
$result = $this->db->query($sql);
$dbResult = new DbResult($result);
return $dbResult;
}
// 데이터 삽입
public function insertData($sql) {
return $this->db->query($sql);
}
// 데이터 업데이트
public function updateData($sql) {
return $this->db->query($sql);
}
// 데이터 삭제
public function deleteData($sql) {
return $this->db->query($sql);
}
// 연결을 닫으십시오
public function close() {
$this->db->close();
}
}
이 예에서 DataAccessLayer 클래스는 쿼리, 삽입, 업데이트 및 삭제와 같은 일반적인 데이터베이스 작업을 캡슐화합니다. 우리는 dbresult 클래스를 사용하여 쿼리 결과를 캡슐화하여 결과의 작동을보다 편리하게 만듭니다.
이제 비즈니스 코드에서 캡슐화 된 데이터 액세스 계층을 사용할 수 있습니다.
// 데이터베이스 액세스 개체를 만듭니다
$dal = new DataAccessLayer('localhost', 'root', '', 'test_db');
// 쿼리 데이터
$sql = "SELECT * FROM users";
$dbResult = $dal->fetchData($sql);
// 쿼리 결과를 얻으십시오
$users = $dbResult->fetchAll();
foreach ($users as $user) {
echo $user['username'] . "<br>";
}
// 데이터베이스 연결을 닫습니다
$dal->close();
이러한 방식으로 각 페이지에서 연결, 쿼리 결과 처리 등과 같은 논리를 반복적으로 작성하지 않고도 데이터베이스 작업을 쉽게 수행 할 수 있습니다.
mysqli_result 결과 세트 및 데이터베이스 연결을 캡슐화하여 공통 데이터 액세스 계층을 만듭니다. 이 데이터 액세스 계층은 데이터베이스 작업을보다 간결하고 재사용 가능하며 코드의 유지 관리 가능성을 향상시킵니다. 비즈니스 요구에 따라이 데이터 액세스 계층을 더 확장하고 트랜잭션 관리, 배치 삽입 등과 같은 더 많은 데이터베이스 작업을 지원할 수 있습니다.
데이터베이스 연결을보다 유연하게 관리하려면 데이터베이스 연결을 여러 번 생성하지 않도록 싱글 톤 패턴을 소개 할 수 있습니다.
이 기사가보다 효율적이고 유지 관리 가능한 데이터베이스 운영 계층을 구축하고 개발 효율성을 향상시키는 데 도움이되기를 바랍니다.