PHP PDO 데이터베이스 조작 예 처리 및 주의사항

PDO(PHP Database Object)는 PHP 액세스 데이터베이스 로 확장 되 어 경량급,일치 성 인 터 페 이 스 를 정의 합 니 다.이 는 데이터 액세스 추상 층 을 제공 합 니 다.그러면 어떤 데이터 베 이 스 를 사용 하 더 라 도 일치 하 는 함수 로 데 이 터 를 조회 하고 얻 을 수 있 습 니 다.데이터베이스 조작 에 있어 서 더욱 안전 하고 효율 적 입 니 다!
PDO 는 PHP 가 각종 데이터 베 이 스 를 방문 하 는 데 경량급 일치 성 인 터 페 이 스 를 정의 했다.모든 데이터 베 이 스 는 일치 하 는 방법 으로 조회 와 데 이 터 를 얻 을 수 있 고 서로 다른 데이터 베이스 간 의 차 이 를 고려 하지 않 아 도 데이터 베이스 작업 을 크게 간소화 했다.PDO 를 사용 하면 mysql,postgresql,oracle,mssql 등 다양한 데이터 베 이 스 를 지원 할 수 있 습 니 다.
예 처리 가 무엇 입 니까?
성숙 한 데이터 베 이 스 는 전처리 문(Prepared Statements)의 개념 을 지원 합 니 다.
그것들 은 무엇 입 니까?컴 파일 된 SQL 구문 템 플 릿 이 라 고 생각 하고 서로 다른 변수 매개 변 수 를 사용 하여 맞 출 수 있 습 니 다.
예비 처리 문 구 는 두 가지 주요 한 장점 을 가지 고 있다.
1.조 회 는 한 번 만 해석(또는 준비)되 지만 같은 매개 변 수 를 사용 하여 여러 번 수행 할 수 있 습 니 다.조회 준비(Prepared)가 되면 데이터 베 이 스 는 분석 하고 컴 파일 하 며 조회 계획 을 최적화 합 니 다.
복잡 한 조회 에 있어 서로 다른 매개 변수 가 있 지만 구조 가 같은 조 회 를 여러 번 반복 하려 면 이 과정 은 많은 시간 을 차지 하여 응용 이 느 려 집 니 다.
예비 처리 문 구 를 사용 하면 중복 분석,컴 파일,최적화 절 차 를 피 할 수 있다.쉽게 말 하면 예비 처리 문 구 는 더 적은 자원 을 사용 하고 실행 속도 도 빠르다.
2.예비 처리 문 구 를 전달 하 는 매개 변 수 는 따옴표 를 사용 하지 않 아 도 되 고 바 텀 구동 은 이 를 처리 할 것 입 니 다.
만약 당신 의 응용 프로그램 이 예 처리 문장 을 독점 적 으로 사용한다 면,SQL 주입 이 일어나 지 않 을 것 이 라 고 확신 할 수 있 습 니 다.
코드 데모:

<?php
header('content-type:text/html; charset=utf-8');
//   pdo  
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;', 'root', '888888');
//  query    sql  
$pdo->query('set names utf8');
//    
$sql  = "insert into persons (name,age) values (?, ?);";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array('  ', 22));
var_dump($res);
//    
$sql = "delete from persons where id = ?";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array(3));
var_dump($res);
//    
$sql = "update persons set name = ? where id = ?;";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array('lucy', 5));
var_dump($res);
//    
$sql = "select * from persons where age > ? order by id desc;";
$preObj = $pdo->prepare($sql);
$preObj->execute(array(20));
$arr = $preObj->fetchAll(PDO::FETCH_ASSOC);
/*
 * FETCH_BOTH       ,  ,       。
 * FETCH_ASSOC                。
 * PDO::FETCH_NUM       
 * PDO::FETCH_OBJ             
 */
print_r($arr);
만약 당신 이 pdo 예비 처 리 를 사용 하여 데 이 터 를 삽입 할 때,오 류 를 보고 합 니 다.

<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '';
try {
  $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
  echo 'Connection failed: ' . $e->getMessage();
}
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('INSERT INTO room (create_time,create_uid,exp_time,is_private) VALUES (?,?,?,?)');
$rs = $sth->execute(["2018-05-14 14:10:04",0,1526278504,1]);
var_dump($sth->errorInfo());exit;
잘못 을 보고 하 다
array (size=3)
  0 => string 'HY000' (length=5)
  1 => int 1364
  2 => string 'Field 'id' doesn't have a default value' (length=39)
이것 은 당신 이 디자인 한 시계의 메 인 키 가 없 기 때 문 입 니 다auto_increment 해결 방법
자체 성장 또는 예비 처리 문 에 홈 키 필드 를 추가 할 수 있 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기