source

WordPress에서 wpdb 클래스를 사용하여 외부 데이터베이스 액세스

goodcode 2023. 2. 14. 23:10
반응형

WordPress에서 wpdb 클래스를 사용하여 외부 데이터베이스 액세스

WordPress에는 외부 데이터베이스에 의존하고 있으며 이 목적으로 wpdb 클래스를 사용하고 있는 커스텀페이지 템플릿이 있습니다.

코드는 다음과 같습니다.

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <header class="entry-header">
        <?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
    </header><!-- .entry-header -->

<?php

class StudentsDatabase
{
    private $db;
    public function __construct() {
        try {
            $this->db = new wpdb(DB_USER, DB_PASSWORD, 'students_db', DB_HOST);
            $this->db->show_errors();
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
    public function getStudentById($student_id)
    {
        return $this->db->get_results("SELECT * FROM `students` WHERE id=$student_id");
    }
    public function getSchoolByAreaCode($area_code)
    {
        return $this->db->get_results("SELECT * FROM `schools` WHERE area_code=$area_code;--");
    }

}
$Students_DB = new StudentsDatabase();
$student_one = $Students_DB->getStudentById(1);
$school_one = $Students_DB->getSchoolByAreaCode(1);

?>
<div class="entry-content">
    <?php

    //do something with $student_one and $school_one ...

    the_content();

    ?>
</div><!-- .entry-content -->

음, 이렇게 하는 게 맞는지 궁금해서요.보안 측면에서도, 다른 측면에서도.

페이지 템플릿 자체에서 외부 DB 호출을 하는 것은 다소 개략적으로 느껴집니다.이러한 기능을 외부 파일에 등록하고 템플릿 내에서만 사용해야 합니까?

가장 "깨끗한" 방법은 당신의 테마에 맞는 API가 되는 플러그인을 구현하는 것이라고 생각합니다.물론 Wordpress(지금까지)에는 의존관계 관리자가 없기 때문에 자신의 목적만을 위한 주제인지 여부에 따라 달라집니다.

요약하자면 테마에서 이 API를 사용합니다.

class선언 php 파일입니다.아니면, 더 나은 건require_once거기에 넣고, 거기에 넣어.assets ★★★★★★★★★★★★★★★★★」includes테마의 폴더입니다.

-/theme/
   -/includes/classes/class-studentsDatabase.php
   -functions.php

기능 중.php

define('TEMPLATE_PATH', get_template_directory());
require_once(TEMPLATE_PATH . '/includes/classes/class-studentsDatabase.php');

하면 '하다'를 인스턴스화할 수 있습니다.class처럼 템플릿 에 따라


보안에 관한 한, 자연에 송신되는 테마에 보안이 필요한 DB 접속을 넣는 것은 피하고 싶다.

그 목적을 위해 당신이 무엇을 하고 있는지 잘 모르겠습니다만, 제시된 바와 같이, 저는 테마 환경 이외에서 그 부분을 다루고 싶습니다.

사용 사례를 모르기 때문에 테마는 외부 api를 활용할 수 있으며, 이 api는 중앙 사이트에서 DB 연결을 관리하는 wordpress wp-json api가 될 수 있습니다.

그렇게 하면 테마는...GETPOST인증 및 CRUD를 처리하고 잠재적인 보안 문제를 대부분 완화하는 엔드포인트로 이동합니다.외부 사이트의 테마는 반환된 json을 구문 분석하는 것일 뿐이며, 그 외에는 DB 액세스 권한이 없습니다.

또한 Wordpress에서 여러 DB로 작업할 수 있는 보다 급진적인 방법이 있습니다.wpdb Codex 페이지에서 다음과 같습니다.

$wpdb 객체는 임의의 수의 테이블과 통신할 수 있지만 기본적으로는 WordPress 데이터베이스인 한 번에 하나의 데이터베이스만 통신할 수 있습니다.드물게 다른 데이터베이스에 접속해야 하는 경우 wpdb 클래스에서 자체 데이터베이스 연결 정보를 사용하여 자신의 개체를 인스턴스화해야 합니다.데이터베이스가 많은 매우 복잡한 설정의 경우 대신 hyperdb 사용을 고려하십시오.

Hyperdb는 여러 DB를 지원하며 코드 구성에 대한 지나친 생각을 대체하는 플러그인입니다.

언급URL : https://stackoverflow.com/questions/44272747/accessing-external-database-using-the-wpdb-class-in-wordpress

반응형