>백엔드 개발 >PHP 튜토리얼 >PHP의 여러 클래스에서 PDO 연결을 올바르게 사용하는 방법은 무엇입니까?

PHP의 여러 클래스에서 PDO 연결을 올바르게 사용하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 00:50:08981검색

How to Properly Use a PDO Connection Across Multiple Classes in PHP?

다른 클래스에서 PDO 연결을 사용하는 방법

수수께끼 오류 이해

"잡히지 않은 오류: 정의되지 않은 메소드 데이터베이스 호출"이라는 오류 메시지 ::prepare()"는 별도의 클래스에서 PDO 연결을 사용하려고 시도할 때 발생할 수 있습니다. 이 오류는 객체 지향 프로그래밍(OOP)이 객체를 상호 연결하는 방식에 대한 오해에서 발생합니다.

문제 해결

1. 데이터베이스 클래스를 다시 생각해보세요:
기존 데이터베이스 클래스는 의미 있는 목적을 제공하지 않습니다. 대신 PDO의 기능을 확장하는 경우 래퍼 클래스를 만드는 데 집중하세요.

2. 중앙 데이터베이스 연결 설정:
PDO 또는 향상된 데이터베이스 클래스를 사용하여 독립형 $db 개체를 인스턴스화합니다. 이 단일 연결은 향후 모든 데이터베이스 활동의 초석이 될 것입니다.

3. 연결을 생성자 매개변수로 전달:
데이터베이스 액세스가 필요한 모든 클래스는 $db 연결을 생성자 인수로 받아야 합니다. 이 접근 방식은 전체 애플리케이션에서 데이터베이스에 대한 원활한 액세스를 보장합니다.

포괄적인 예

다음 개선 사항을 고려하세요. 코드베이스:

database.php:

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new \PDO($dsn, $user, $pass, $opt);

u ser.php:

class User {
    /* Properties */
    private $conn;

    /* Get database access */
    public function __construct(\PDO $pdo) {
        $this->conn = $pdo;
    }

    /* List all users */
    public function getUsers() {
        return $this->conn->query("SELECT username, usermail FROM user")->fetchAll();
    }
}

app.php:

include 'database.php';
$user = new User($pdo);
$list = $user->getUsers();

foreach($list as $test) {
    echo $test["username"],"\n";
}

이것 세련된 코드베이스는 여러 클래스에서 PDO 연결의 올바른 사용법을 예시하여 오류 없는 작동과 우아한 코딩 관행을 보장합니다.

위 내용은 PHP의 여러 클래스에서 PDO 연결을 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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