>백엔드 개발 >PHP 튜토리얼 >PHP의 외부 클래스에서 MySQLi에 액세스하는 방법: 종속성 주입으로 내부 서버 오류 극복

PHP의 외부 클래스에서 MySQLi에 액세스하는 방법: 종속성 주입으로 내부 서버 오류 극복

DDD
DDD원래의
2024-10-28 14:32:02815검색

How to Access MySQLi from External Classes in PHP: Overcoming Internal Server Errors with Dependency Injection

PHP의 외부 클래스에서 MyISQL 활용

MySql에서 Mysqli로의 해당 데이터베이스 조정을 통해 PHP 5.6에서 7.0으로 마이그레이션하면 다음과 같은 확실한 사실이 공개됩니다. 도전. 여기에서는 근본적인 문제를 조사하고 대체 솔루션을 제공할 것입니다.

구조 이해

먼저, 개인 속성과 생성자를 포함하는 데이터베이스 클래스를 고안했습니다. 연결을 설정합니다. 그러나 이 설정은 다른 클래스에서 액세스할 때 연결을 끊습니다.

두 번째로 데이터베이스와 상호 작용하도록 설계된 API 클래스가 있지만 생성자 내에서 데이터베이스 연결을 위해 별도의 새로운 인스턴스화를 활용합니다.

오류의 원인: 내부 불일치

API 클래스에서 $this->db->conn을 참조하면 null이 검색되어 내부 서버 오류가 발생합니다. 이는 $this->db가 객체 생성 시에만 초기화되고 연결 데이터를 유지하지 않기 때문에 발생합니다.

제안 솔루션: 종속성 주입

대신 각 클래스에 대해 별도의 인스턴스화를 수행하려면 종속성 주입을 고려하세요. 방법은 다음과 같습니다.

  1. 필요한 연결 설정 코드를 사용하여 독립형 데이터베이스 클래스를 생성합니다.
  2. 이 데이터베이스 객체의 인스턴스를 데이터베이스 액세스가 필요한 모든 클래스에 생성자 매개변수로 전달합니다.

이러한 원칙을 수용하면 PHP 애플리케이션 내의 여러 클래스에서 MySQLi를 효과적으로 활용할 수 있습니다.

구현 예

데이터베이스 .php:

<code class="php">$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB");
$db->set_charset('utf8mb4');</code>

myapi.php:

<code class="php">class MyAPI {
    protected $db;
    
    public function __construct($db) {
        $this->db = $db;
    }
    
    // ... Rest of your code
}</code>

app.php:

<code class="php">require 'database.php';
require 'myapi.php';

$api = new MyAPI($db);
// Utilize the API as intended</code>

이러한 구조 조정을 통해 애플리케이션 전체에서 데이터베이스 리소스에 대한 일관된 액세스가 보장되어 발생하는 내부 서버 오류가 완화됩니다.

위 내용은 PHP의 외부 클래스에서 MySQLi에 액세스하는 방법: 종속성 주입으로 내부 서버 오류 극복의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.