php 는 예비 처리 문 구 를 사용 하여 데이터 베 이 스 를 조작 합 니 다.

예 처리 문 구 는 무엇 입 니까?
예비 처리 문 구 는 실행 하고 자 하 는 SQL 문장의 컴 파일 된 템 플 릿 으로 볼 수 있 으 며 변수 파 라 메 터 를 사용 하여 제어 할 수 있 습 니 다.예비 처리 문 구 는 두 가지 좋 은 점 을 가 져 올 수 있다.
4.567917.조 회 는 한 번 만 분석(또는 예비 처리)해 야 하지만 똑 같 거나 다른 매개 변수 로 여러 번 수행 할 수 있 습 니 다.조회 가 준 비 된 후에 데이터 베 이 스 는 이 조회 의 계획 을 분석,컴 파일 하고 최적화 할 것 이다.복잡 한 조회 에 있어 서 이 과정 은 비교적 긴 시간 이 걸 리 고 서로 다른 매개 변수 로 같은 조 회 를 여러 번 반복 해 야 한다 면 이 과정 은 응용 프로그램의 속 도 를 크게 낮 출 것 이다.예비 처리 문 구 를 사용 하면 중복 분석/컴 파일/최적화 주 기 를 피 할 수 있 습 니 다.쉽게 말 하면 예비 처리 문 구 는 더 적은 자원 을 차지 하기 때문에 더욱 빨리 운행 된다4.567917.예비 처리 문 구 를 제공 하 는 매개 변 수 는 따옴표 로 묶 을 필요 가 없고 드라이버 가 자동 으로 처리 합 니 다.프로그램 이 사전 처리 문구 만 사용 하면 SQL 주입 이 일어나 지 않도록 할 수 있 습 니 다.(그러나 조회 의 다른 부분 이 전의 되 지 않 은 입력 으로 구 축 된 경우 SQL 주입 의 위험 이 존재 합 니 다상술 한 내용 은 공식 문서 에서 발췌 한 설명 이지 만 사실 예 처리 문 구 는 우리 에 게 SQL 주입 을 효과적으로 예방 할 수 있다 는 가장 직관 적 인 장점 을 준다.SQL 이 주입 한 내용 에 대해 우 리 는 앞으로 MySQL 을 공부 할 때 깊이 있 는 공 부 를 할 것 입 니 다.여 기 는 많은 소개 에 불과 합 니 다.어쨌든 예비 처리 문 구 는 이 일 을 완성 할 수 있 었 으 면 좋 겠 습 니 다.
PDO 작업 전처리 문
PHP 의 확장 에서 PDO 는 이미 주류 의 핵심 데이터베이스 확장 라 이브 러 리 이 고 자 연 스 럽 게 예비 처리 문 에 대한 지원 도 매우 전면적 이다.

$pdo = new PDO('mysql:host=localhost;port=3306;dbname=blog_test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// :xxx    
$stmt = $pdo->prepare("insert into zyblog_test_user (username, password, salt) values (:username, :password, :salt)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->bindParam(':salt', $salt);

$username = 'one';
$password = '123123';
$salt = 'aaa';
$stmt->execute();

$username = 'two';
$password = '123123';
$salt = 'bbb';
$stmt->execute();
코드 에서 저 희 는 prepare()방법 으로 예비 처리 문 구 를 정의 합 니 다.이 방법 은 PDOStatement 대상 을 되 돌려 줍 니 다.미리 처 리 된 구문 에서 사용:xxx 와 같은 자리 차지 기 호 를 사용 하고 외부 에서 PDOStatement 대상 의 bidParam()방법 으로 이 자리 차지 기 호 를 연결 합 니 다.마지막 으로 execute()를 통 해 SQL 문 구 를 진정 으로 실행 합 니 다.
이 코드 에서 우 리 는 예비 처리 문장의 두 가지 장점 을 볼 수 있다.먼저 자리 표시 자 입 니 다.자리 표시 자 를 사용 한 후에 우 리 는 SQL 구문 에 작은 따옴표 를 쓰 지 않 아 도 됩 니 다.작은 따옴표 는 SQL 이 주입 하 는 주요 구멍 소스 입 니 다.bidParam()방법 은 바 인 딩 데이터 의 형식 을 자동 으로 변환 합 니 다.물론 bidParam()방법 도 선택 할 수 있 는 매개 변수 에서 바 인 딩 된 데이터 형식 을 지정 할 수 있 습 니 다.그러면 저희 코드 가 더욱 안전 하고 관련 문 서 를 찾 아 볼 수 있 습 니 다.
또 다른 장점 은 템 플 릿 의 능력 이다.우 리 는 하나의 PDOStatement 대상 만 정의 한 다음 에 데이터 의 내용 을 바 꾸 면 execute()방법 으로 예비 처리 문 구 를 여러 번 실행 할 수 있다.
자리 표시 자 는 또 다른 쓰기 방법 이 있 습 니 다.바로 하나의 물음표 로 자리 표시 기 호 를 사용 하 는 것 입 니 다.이 경우 bidParam()방법의 키 이름 은 숫자 아래 표 시 를 사용 해 야 합 니 다.여기 서 주의해 야 할 것 은 숫자 아래 표 시 는 1 부터 시작 되 었 다 는 것 이다.

// ?    
$stmt = $pdo->prepare("insert into zyblog_test_user (username, password, salt) values (?, ?, ?)");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->bindParam(3, $salt);

$username = 'three';
$password = '123123';
$salt = 'ccc';
$stmt->execute();
우리 의 조회 에서 도 예비 처리 문장의 기능 을 편리 하 게 사용 하여 데이터 조 회 를 할 수 있다.여기 서,우 리 는 자리 표시 자 에 인 자 를 전달 하기 위해 execute()를 직접 사용 합 니 다.

//       
$stmt = $pdo->prepare("select * from zyblog_test_user where username = :username");

$stmt->execute(['username'=>'one']);

while($row = $stmt->fetch()){
    print_r($row);
}
my sql 작업 예비 처리 문
주 류 는 PDO 이 고 대부분의 프레임 워 크 에서 PDO 를 사용 하지만 우 리 는 스 크 립 트 를 쓰 거나 일부 기능 을 빠르게 테스트 해 야 할 때 my sql 을 사용 하여 빠르게 개발 합 니 다.물론 my sql 도 예비 처리 문 관련 기능 을 지원 합 니 다.

// mysqli    
$conn = new mysqli('127.0.0.1', 'root', '', 'blog_test');
$username = 'one';
$stmt = $conn->prepare("select username from zyblog_test_user where username = ?");
$stmt->bind_param("s", $username);

$stmt->execute();

echo $stmt->bind_result($unames);

var_dump($unames);

while ($stmt->fetch()) {
    printf("%s
", $unames); }
이 를 통 해 알 수 있 듯 이 my sql 은 방법 명 이 다른 것 을 제외 하고 바 인 딩 매개 변수의 키 이름 도 완전히 같 지 않 습 니 다.여기 서 우리 가 사용 하 는 것 은 물음표 가 자 리 를 차지 하고 bid 입 니 다.param()방법 에 서 는 s 를 사용 하여 기호 위 치 를 표시 합 니 다.여러 개의 매개 변수 라면 sss 로 써 야 합 니 다.
총결산
사전 처리 문장의 능력 은 현재 의 프레임 워 크 에서 이미 우리 에 게 봉 해 주 었 다.사실 우 리 는 크게 관심 을 가 질 필요 가 없다.예 를 들 어 Laravel 에서 DB:select()를 사용 하여 데이터 베 이 스 를 조작 할 때 우 리 는 예비 처리 문장의 응용 을 볼 수 있다.
vendor/lavel/framework/src/Illuminate/database/connection.php 의 select()방법 을 스스로 찾 아 볼 수 있 습 니 다.
테스트 코드
이상 은 phop 에서 예비 처리 문 구 를 사용 하여 데이터 베 이 스 를 조작 하 는 상세 한 내용 입 니 다.phop 예비 처리 문 구 를 사용 하여 데이터 베 이 스 를 조작 하 는 자 료 는 우리 의 다른 관련 글 에 관심 을 가 져 주 십시오!

좋은 웹페이지 즐겨찾기