>데이터 베이스 >MySQL 튜토리얼 >자신만의 데이터베이스 패키지를 작성하는 방법 (1)

자신만의 데이터베이스 패키지를 작성하는 방법 (1)

PHPz
PHPz원래의
2018-05-17 15:12:511619검색


앞에 적어주세요

  1. 아직 신인이니 틀린 부분은 가볍게 댓글로 지적해주세요

  2. 얕은 작업 경험으로 인해 데이터베이스 연결을 완전히 다룰 수 없습니다. 더 복잡한 쿼리에는 예상치 못한 버그가 발생할 수 있습니다

  3. 그래서 이 시리즈는 성숙하고 안정적인 아이디어만 제공합니다. 데이터베이스 패키지를 직접 검색하세요

  4. 이 시리즈를 작성하는 원래 의도는 다른 사람들에게 영감을 주는 것입니다. 각 섹션의 뒷부분에서 개인적인 질문을 드리겠습니다. 질문이 있든 없든, 일부 마스터가 내 질문에 답할 수 있기를 바랍니다

  5. 사용된 PHP 버전은 7.0+입니다. 이 시리즈는 아직 버전과 호환되지 않습니다. 5.6 꼭 놀러오세요

  6. 데이터베이스 패키지는 laravel의 소스코드를 참조하고 있습니다. 유사점이 있으면 우연이 아닙니다

최종 효과

테이블 이름이 'Actor'라고 가정합니다. 간단한 설정 후 다음과 같이

$a = Actor::select('first_name', 'last_name')
        ->where('first_name', 'NICK')
        ->where('last_name', 'WAHLBERG')
        ->first()
var_dump($a);

를 직접 호출할 수 있습니다. (up

날짜

/삭제)

object(Actor)[11]
  public 'first_name' => string 'NICK' (length=4)
  public 'last_name' => string 'WAHLBERG' (length=8)
일반적인 데이터베이스 연결 작성 방법

php에 대한 어느 정도 이해가 있는 사람이라면 누구나 알 것이다. 제거된

mysql

또는 대체된 mysqli와 비교하여 pdo는 SQL 주입 공격을 피할 수 있고 안전하며 객체 지향이므로 다음과 같이 사용됩니다. pdo 예

$a->update(...);
$a->delete();
위의 예는 매우 간결합니다. 프로젝트가 점차 커지고 복잡해지면 일부 보조

함수처럼 코드 중복을 줄이기 위해 캡슐화 클래스가 필요합니다.

우리가 보통 직접 작성하지만 캡슐화 클래스가 조금 더 발전한 것뿐입니다. 기본 아이디어

그럼 어떻게 작성해야 할까요?

우선, 일부 코드를 단순화해야 할 때 우리는 보통 몇 가지 보조 기능을 직접 작성합니다. 예를 들어 저는 개인적으로

디버깅
기능을 사용하는 것을 좋아하지 않습니다. editor(음성 해설: sublime text 3을 사용합니다) 그래서 디버깅할 때 처음에 이렇게 작성합니다.

<?php
$driver=&#39;mysql&#39;; //数据库类型

$host=&#39;localhost&#39;; //数据库主机名

$db = &#39;sakila&#39;; //数据库名称

$username=&#39;root&#39;; //数据库连接用户名

$password=&#39;&#39;; //数据库密码

$dsn="$driver:host=$host;dbname=$db";

try {    
    $pdo= new PDO($dsn, $username, $password); //初始化一个PDO对象   

    $sql = "select * from actor";

    $res = $pdo->query($sql); // 从actor中获取所有数据

    foreach($res as $row) echo $row['first_name']."<br>";

} catch (PDOException $e) {    
    die($e->getMessage());
}
die(var_dump())가 약간 더 높습니다. 사용률이 높아서 보조기능으로 작성했습니다.

$a = "is bug";
die(var_dump($a)); // 输出变量并且停止运行之后的代码
/***从xdebug得知bug出现在这一行,所以查看上一行的逻辑与数据 ***/

같은 이유로 데이터베이스에서 읽을 때 select의 출현율이 엄청나게 높으니 간단히 정리하세요.

function dd($var) {
    die(var_dump($var));
}

function select($pdo, $table, $require, $where = []) {
    $w = [];

    // 将搜索条件转化为数据库命令能接受的格式
    foreach ($where as $key => &$val) 
        $w[] = "$key = '$val'";

    // 有时候并不需要条件,仅仅将所有数据取出,因此$where默认为空
    if(!empty($w)) $w = "where ".implode(', ', $w);
    else $w = "";

    // 生成sql query
    $sql = "select $require from $table $w";

    // 将已生成的query带入pdo实例
    $res = $pdo->query($sql);

    // 返回结果
    return $res->fetchAll();
}

요약하자면 데이터베이스 캡슐화는 간단합니다. 설명은 매개변수를 보조 기능으로 가져와 자동으로 SQL 명령을 생성하도록 하는 것입니다.

데이터베이스 캡슐화된

아키텍처

는 주로 4개의 파일로 나뉩니다.

    Connector.php - 데이터베이스와의 통신을 담당합니다. 데이터베이스 데이터 요청 및 반환
  • Model

    .php - 입력 파일, 테이블 설정, 요청 수락 및 반환을 담당합니다. response

  • Grammar.php - Builder에 저장된 요청을 SQL 문으로 변환합니다.
  • Builder.php - 코어 파일, 모델에 대한 요청 저장, 호출 SQL을 반환하는 문법 구문은 매개 변수 변수와 함께 Connector로 전송되어 데이터베이스 데이터를 얻은 다음 Model로 반환됩니다
  • 아키텍처는 잘 설명되지 않을 수 있지만 상관없습니다. 자세한 설명은 다음번에 하나씩 할게요

대략 이렇습니다. 가능하시다면 좋아요를 눌러주시거나 아래 댓글란에 의견만 남겨주세요. 게으른 암 환자가 앞으로 나아갈 수 있도록 밀어붙일 수 있습니다.

위 내용은 자신만의 데이터베이스 패키지를 작성하는 방법 (1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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